线性插值、三次样条插值matlab代码,外插和内插均可

线性插值的原理很简单,自行百度即可。三次样条插值,具体的原理网上也已经有很多了,这里不再赘述,具体可参考样条插值(Spline Interpolation)-云社区-华为云 (huaweicloud.com)

matlab本身自带有interp1和interp2,可直接调用,具体调用方式为:

yy = interp1(x, y, xx,'spline'); 

yy = interp1(x, y, xx,'linear'); 

zz = interp2(x,y,z,xx,yy,'spline');

zz = interp2(x,y,z,xx,yy,'linear');

我这里分享几个我自己写的代码,想知道插值具体是怎么实现的同学可以参考,直接上代码:

首先是三次样条插值,其中求逆矩阵是用的高斯消元法

function yy=spline3(x,y,xx)
n=length(x)-1;
G1=zeros(2*n,4*n);
for i=1:n
    tmp=[x(i)^3,x(i)^2,x(i)^1,1;x(i+1)^3,x(i+1)^2,x(i+1)^1,1];
    G1(2*i-1:2*i,4*i-3:4*i)=tmp;
    tmp=[y(i);y(i+1)];
    D1(2*i-1:2*i,:)=tmp;
end

G2=zeros(n-1,4*n);
for i=1:n-1
    tmp=[3*x(i+1)^2,2*x(i+1),1,0,-3*x(i+1)^2,-2*x(i+1),-1,0];
    G2(i,4*i-3:4*i+4)=tmp;
end
D2=zeros(size(G2,1),1);

G3=zeros(n-1,4*n);
for i=1:n-1
    tmp=[6*x(i+1),2,0,0,-6*x(i+1),-2,0,0];
    G3(i,4*i-3:4*i+4)=tmp;
end
D3=zeros(size(G3,1),1);

G4=zeros(2,4*n);
tmp1=[6*x(1),2,0,0];
tmp2=[6*x(end),2,0,0];
G4(1,1:4)=tmp1;
G4(2,end-3:end)=tmp2;
D4=[0,0]';

G=[G1;G2;G3;G4];
D=[D1;D2;D3;D4];

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值