两条线的交点

时间:2010-02-12 07:52:20

标签: matlab

如何用给定的表达式或方程式获得两个线图交点的坐标?

例如: L1 = sin(2x),L2 = Ln(x);或其他任何东西。

5 个答案:

答案 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) == 0log是自然登录matlab)。

如果您已经设置了类似的功能,例如L1 = @(x)sin(2*x)L2 = @(x)log(x)(或函数L1.mL2.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)

这不是一个小问题:你要求的是解决任何数学方程式的一般方法。

例如,您可以考虑使用bisection methodNewton's method

没有一般答案。

答案 4 :(得分:0)

作为一般的非分析解决方案,当您有2组点描述的任何2条曲线时,在文件交换中提交了很多 - Fast and Robust Curve Intersections