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 y0<min(y) || y0>max(y)

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

else

below=y<y0;

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)','交点')

  image


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值