繁体   English   中英

两条线的交点

[英]intersection of two line

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

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

令人惊讶的是,还没有人建议在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

由于你用matlab标记,你可以用fsolve(@(x)sin(2*x)-log(x),1)来做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)

通常,您必须求解方程L1(x)= L2(x)。 如果您从一开始就不知道L1和L2是什么(线性,多项式......)那么唯一的解决方案就是使用Netwon算法进行数值求解。 然后问题减少到找到函数f(x)= L1(X)-L2(X)的根(零)。

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

例如,您可以考虑使用二分法牛顿法

没有一般的答案。

作为一般的非分析解决方案,如果您有2组点描述的任何2条曲线,则在文件交换 - 快速和稳健曲线交点处提交的文章很多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM