Matlab 两条直线的交点
如何用给定的表达式或方程式获得两个线图的交点坐标 例如:Matlab 两条直线的交点,matlab,Matlab,如何用给定的表达式或方程式获得两个线图的交点坐标 例如: L1=sin(2x),L2=Ln(x);一般来说,你必须解方程L1(x)=L2(x)。如果您从一开始就不知道L1和L2是什么(线性、多项式…),那么唯一的解决方案就是数值求解,例如使用算法。然后,问题就归结为寻找函数f(x)=L1(x)-L2(x)的根(零)。这不是一个简单的问题:你所要求的是求解任何数学方程的一般方法 例如,可以考虑使用,或. 没有一般的答案。因为您使用matlab标记,所以可以使用fsolve(@(x)sin(2*x)
L1=sin(2x),L2=Ln(x);一般来说,你必须解方程L1(x)=L2(x)。如果您从一开始就不知道L1和L2是什么(线性、多项式…),那么唯一的解决方案就是数值求解,例如使用算法。然后,问题就归结为寻找函数f(x)=L1(x)-L2(x)的根(零)。这不是一个简单的问题:你所要求的是求解任何数学方程的一般方法
例如,可以考虑使用,或.
没有一般的答案。因为您使用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)
令人惊讶的是,还没有人建议在matlab中使用专门为此设计的函数。在这里使用fzero。Fzero是一个比fsolve更好的选择,因为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
作为一个一般的非解析解,当你有两组点描述的任意两条曲线时,在文件交换中有很好的提交-。在我的位置无法访问mathwork。请给我另一个链接。谢谢。我在这里为你上传了最新版本:我想你还是不能下载,给我发个电子邮件。