数学建模之一维二维插值算法(含matlab源代码

目录

一、一维插值

1、应用条件

 2、插值方法

1)拉格朗日插值法

 代码

 2)高次插值的 Runge 现象

3、matlab命令

举例:

 二、二维插值

1、matlab命令

 2、散乱点插值


一、一维插值

1、应用条件

“ 已 知 函 数 在 某 区 间(域)内若干点处的值,求函数在该区间(域)内其它点处的值”,

 

 2、插值方法

常用的插值方法有 Lagrange 插值法和Newton 插值法。

1)拉格朗日插值法

拉格朗日插值公式(外文名Lagrange interpolation formula)指的是在节点上给出节点基函数,然后做基函数的线性组合,组合系数为节点函数值的一种插值多项式。

 代码
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

 2)高次插值的 Runge 现象

插值多项式的次数越高,插值精度越高。

Runge 通过对一个例子的研究发现,上述结论仅仅在插值多项式的次数不超过七时成立;插值多项式的次数超过七时,插值多项式会出现严重的振荡现象,称之为 Runge 现象。

避免 Runge 现象的常用方法是:将插值区间分成若干小区间,在小区间内用低次(二次,三次)插值,即分段低次插值,如样条函数插值。

3、matlab命令

一维插值命令是 interp1, 其基本格式为 yi= interp1(x,y,xi, 'method')。

x,y 为插值点,xi,yi 为被插值点和插值结果,x,y 和 xi,yi 通常为向量;'method'表示 插 值 方 法 : ' n e a r e s t ' — 最 邻 近 插 值 ,'linear'—线性插值, 'spline'—三次样条插值,'cubic'—立方插值,缺省为线性插值。

举例:
x=0:2:24;
y=[12 9 9 10 18 24 28 27 25 20 18 15 13];
x1=13;
y1=interp1(x,y,x1,'spline')
xi=0:1/3600:24;
yi=interp1(x,y,xi, 'spline');
plot(x,y, '*',xi,yi)

x y为插值点,x1为被插值点,y1使用三次样条插值。

xi为第二个被插值点,yi也使用三次样条插值。

plot绘图制作

只执行x1 y1的图象

 执行xi yi的图像

 二、二维插值

1、matlab命令

二维插值命令是interp2, 基本格式为zi=interp2(x,y,z,xi,yi,'method')。

二维插值命令的使用较复杂。
x,y,z为插值点,z可以理解为被插值函数在(x,y)处的值;xi,yi为被插值点, zi为输出的插值结果,可理解为插值函数在(xi,yi)处的值;x,y为向量,xi,yi为向量或矩阵,而z和zi则为矩阵。

' m e t h o d ' 表 示 插 值 方 法 : ' n e a r e st'—最邻近插值, 'linear'—双线性插值,'spline'—双三次样条插值,'cubi c'—双立方插值,黙认双线性插值。

x=1:5;
y=1:3;
temps=[82 81 80 82 84;79 63 61 65 81;84 84 82 85 86];
figure(1);
mesh(x,y,temps);

interp2 中的 xi 为行向量, 而 yi'为列向量, 其实 xi 和 yi 行列不同即可。

 

xi=1:0.2:5;
yi=1:0.2:3;
zi=interp2(x,y,temps,xi,yi','cubic');
figure(2);
mesh(xi,yi,zi);

plot3(空间曲线), mesh(空间曲面),surf (空间曲面), contour(等高线)是三维作图中的常用命令。mesh 和 surf 的区别是:
mesh 画的是曲面网格图,而 surf 画的是曲面表面图

figure(3);
contour(xi,yi,zi,20,'r');
[i,j]=find(zi==min(min(zi)));
x=xi(j),y=yi(i),zmin=zi(i,j)
[i,j]=find(zi==max(max(zi)));
x=xi(j),y=yi(i),zmax=zi(i,j)

 

c o n t o u r ( x , y , z , n ) 的 功 能 是 作 出 由 点
(x,y,z)插值而成曲面的 n 条等高线。
用 meshc 和 surfc 可在曲面下方画等高线。
meshz 和 surfz 是画垂帘图。

程序的最后部分为求最高 (低)点

 例二:

在某山区测得一些地点的高程如下表。平面区域为0<x<5600, 0<y<4800试用 Matlab 中的最邻近插值、双线性插 值和 双三 次插 值 3 种方 法 作 出该山区的地貌图和等高线图,并求出最高和最低点。

x=...
y=...
z=...
figure(1);
meshz(x,y,z);
xlabel('X'),ylabel('Y'),zlabel('Z');

[xi,yi]=meshgrid(0:50:5600,0:50:4800);
figure(2);
z1i=interp2(x,y,z,xi,yi,'nearest');
surfc(xi,yi,z1i);
xlabel('X'),ylabel('Y'),zlabel('Z');

figure(3);
z2i=interp2(x,y,z,xi,yi);
surfc(xi,yi,z2i);
xlabel('X'),ylabel('Y'),zlabel('Z');

figure(4);
z3i=interp2(x,y,z,xi,yi,'cubic');
surfc(xi,yi,z3i);
xlabel('X'),ylabel('Y'),zlabel('Z');

figure(5);
subplot(1,3,1),contour(xi,yi,z1i,10,'r');
subplot(1,3,2),contour(xi,yi,z2i,10,'r');
subplot(1,3,3),contour(xi,yi,z3i,10,'r');

 程 序 用 “ [xi, yi]= meshgrid(0:50 :5600,0:50:4800);”生成网格点(xi,yi),作用相当于“xi=0:50:5600;yi'=0:50:4800;”,但 meshgrid(x,y)生成的 xi,yi 为同维矩阵,xi 的行均为 x,而 yi 的列均为 y。

 2、散乱点插值

前面讨论的插值问题的插值点(x, y)均为网格点 。当 ( x , y ) 为散乱点时,可用griddata(x,y,z,xi,yi, 'method') 命令进行二维插值。

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值