[英]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) == 0
( log
是matlab中的自然日志)。
如果你已经设置了类似的函数,例如L1 = @(x)sin(2*x)
和L2 = @(x)log(x)
(或函数L1.m
和L2.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.