数据插值问题探究(MATLAB代码)

数据插值问题探究(MATLAB代码)

插值问题就是已知一段时间内的数据,根据这些数据去求该时间段内未知时间的数据。数学语言就是:已知函数在某区间(域)内若干点处的值,求函数在该区间(域)内其它点处的值。在此研究了4种插值方法,供大家学习探讨。

1、二维数据内插
例1

[X,Y] = meshgrid(-3:.25:3);
Z = peaks(X,Y);
[XI,YI] = meshgrid(-3:.125:3);
ZZ = interp2(X,Y,Z,XI,YI);
surfl(X,Y,Z);
hold on;
surfl(XI,YI,ZZ+15)
axis([-3 3 -3 3 -5 20]);
shading flat
hold off

结果:
在这里插入图片描述
例2

 years = 1950:10:1990;
service = 10:10:30;
wage = [150.697 199.592 187.625
179.323 195.072 250.287
203.212 179.092 322.767
226.505 153.706 426.730
249.633 120.281 598.243];
w = interp2(service,years,wage,15,1975)

即可得到1975年的w = 190.6287

2、分段线性插值

x=0:2:30;
y=[12,9,8,10,18,24,26,27,25,21,18,17,13,12,10,9];
x1=0:0.5:30;
y1=interp1(x,y,x1,'linear');

plot(x,y,'bo',x1,y1,'r:');

结果:
在这里插入图片描述

3、三次样条插值

x = [0 2 4 7 8 12 12.8 16.2 19.5 22]; y = exp(x).*sin(x);
xx = 0:.25:22;
yy = spline(x,y,xx);
plot(x,y,'o',xx,yy)

结果:
在这里插入图片描述
4、拉格朗日插值法

%n 个节点数据以数组 x0, y0 输入(注意 Matlat 的数组下标从1开始),
%m 个插值点以数组 x 输入,输出数组 y 为 m 个插值
function y=lagrange(x0,y0,x)
n=length(x0);
m=length(x);
for i=1:m
z=x(i);
s=0.0;
for k=1:n
      p=1.0;    
      for j=1:n          
             if j~=k
              p=p*(z-x0(j))/(x0(k)-x0(j));
           end
      end
s=p*y0(k)+s;
end
y(i)=s;
end

%数据:
x0=1:1:20;
y0=x0.^2-20*x0-5;
x=1:0.1:20;
z=lagrange(x0,y0,x);
plot(x,z,':',x0,y0,'ko');```

结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/dd227a49fbcf497f9c6e876cf0e89137.bmp?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0lHU3p0,size_16,color_FFFFFF,t_70)
手机扫一扫,获取更多MATLAB实用技能哦~
![在这里插入图片描述](https://img-blog.csdnimg.cn/25b05d663a574944b65e2452f60f695d.jpg)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IGSzt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值