matlab找零点或两个曲线的交点

寻找方程的零点可以等价于寻找两个曲线的交点,因此这里放在一起进行讨论。

思路为:首先对应函数值y0,对自变量x进行插值,找出给定区间内所有满足f(x)=y0的x值,再令y0=0,即可得到方程的零点或者两曲线的交点横坐标。

首先必须找出y=y0直线上下交错排列的所有数据点,即(xk,yk)(xk+1,yk+1),在此区间内认为函数y为单调的,可以用逻辑运算加移位来实现。代码如下:

function [x0,y0]=invinterp(x,y,y0)

x=x(:);y=y(:);

n=numel(y);

if y0max(y)

x0=[];y0=[];%不存在则直接退出

else

below=y

above=y>=y0;

kth=(below(1:n-1)&above(2:n)) | (above(1:n-1)&below(2:n));

kp1=[false;kth];

alpha=(y0-y(kth))./(y(kp1)-y(kth));

x0=alpha.*(x(kp1)-x(kth))+x(kth);

y0=repmat(y0,size(x0));

end

以上函数实现给定x,y和y0的前提下利用线性插值找出对应y0的x值x0

于是利用上面的函数即可实现寻找方程的零点或者曲线的交点。实例如下:

x=linspace(0,10);

y=sin(x);

z=2*cos(3*x);

x0=invinterp(x,y-z,0);

y0=interp1(x,y,x0);

plot(x,y,x,z,x0,y0,'o')

legend('曲线1:y=sin(x)','曲线2:y=2cos(3x)','交点')

  


http://liufanghit.blog.163.com/blog/static/402192201111141341151/

你可能感兴趣的:(Matlab,学习笔记)