如何用给定的表达式或方程式获得两个线图交点的坐标?
例如: L1 = sin(2x),L2 = Ln(x);或其他任何东西。
答案 0 :(得分:6)
令人惊讶的是,还没有人建议在matlab中使用专门设计的功能。在这里使用fzero。无论如何,Fzero是比fsolve更好的选择,这需要优化工具箱。而且,是的,你可以用牛顿的方法,甚至是二分法或割线法来做到这一点。但重新发明轮子是不错的做法。使用已存在的功能。
目前的问题是找到一个点
sin(2*x) == log(x)
这里log(x)指的是自然日志。通过从另一个中减去一个来执行此操作,然后查找结果的零。
fun = @(x) sin(2*x) - log(x);
在你这样做之前,总是绘制它。 ezplot可以帮到你。
ezplot(fun)
该图将显示介于1和2之间的单个根。
fzero(fun,2)
ans =
1.3994
答案 1 :(得分:4)
由于您使用matlab标记,因此您可以使用fsolve(@(x)sin(2*x)-log(x),1)
来执行此操作,这会给出1.3994(1是初始起点或猜测)。 y坐标为log(1.3994) = 0.3361
。
也就是说,您使用fsolve
,将您想要解决的函数传递给零,在这种情况下为sin(2*x) == log(x)
,因此您需要sin(2*x) - log(x) == 0
(log
是自然登录matlab)。
如果您已经设置了类似的功能,例如L1 = @(x)sin(2*x)
和L2 = @(x)log(x)
(或函数L1.m
和L2.m
),您可以使用fsolve(@(x)L1(x)-L2(x),1)
。
答案 2 :(得分:2)
通常,您必须求解方程L1(x)= L2(x)。如果您从一开始就不知道L1和L2是什么(线性,多项式......)那么唯一的解决方案是数值求解,例如使用Netwon算法。然后问题减少到找到函数f(x)= L1(X) - L2(X)的根(零)。
答案 3 :(得分:2)
答案 4 :(得分:0)
作为一般的非分析解决方案,当您有2组点描述的任何2条曲线时,在文件交换中提交了很多 - Fast and Robust Curve Intersections。