数学建模学习笔记day7——插值和拟合
插值与拟合时数学建模中的一种基本的数据分析手段,被公认为建模中的常用算法之一。
介绍插值问题,插值原理,高次插值的Runge现象,介绍了一维和二维的插值命令
介绍拟合问题、拟合原理与步骤,然后是matlab的拟合计算
一、插值
1.拉格朗日插值法
在节点上给出节点基函数,然后做基函数的线性组合,组合系数为节点函数值的一种插值多项式
过
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
(
x
3
,
y
3
)
(x_1,y_1),(x_2,y_2),(x_3,y_3)
(x1,y1),(x2,y2),(x3,y3)的二次曲线可以拆分成三个曲线之和
①过
(
x
1
,
1
)
,
(
x
2
,
0
)
,
(
x
3
,
0
)
(x_1,1),(x_2,0),(x_3,0)
(x1,1),(x2,0),(x3,0)的
f
(
x
1
)
f(x_1)
f(x1)
②过
(
x
1
,
0
)
,
(
x
2
,
1
)
,
(
x
3
,
0
)
(x_1,0),(x_2,1),(x_3,0)
(x1,0),(x2,1),(x3,0)的
f
(
x
1
)
f(x_1)
f(x1)
③过
(
x
1
,
0
)
,
(
x
2
,
0
)
,
(
x
3
,
1
)
(x_1,0),(x_2,0),(x_3,1)
(x1,0),(x2,0),(x3,1)的
f
(
x
1
)
f(x_1)
f(x1)
则原函数
f
(
x
)
f(x)
f(x)可写为
y
1
f
(
x
1
)
+
y
2
f
(
x
2
)
+
y
3
f
(
x
3
)
y_1f(x_1)+y_2f(x_2)+y_3f(x_3)
y1f(x1)+y2f(x2)+y3f(x3)
同样的任意一个多项式都可以写成
f
(
x
)
=
∑
i
=
0
k
y
∏
j
≠
i
x
−
x
j
x
i
−
x
j
f(x)=\sum\limits_{i=0}^ky\prod_{j\not= i}\frac{x-x_j}{x_i-x_j}
f(x)=i=0∑kyj=i∏xi−xjx−xj
2.高次插值的Runge现象
高次拟合边缘处会产生Runge现象,因此不应使用七次以上的插值。
避免Runge现象的常用方法是,将插值区间分成若干小区间,在小区间内用低次的插值
二、matlab插值计算
1.一维插值
一维插值的命令是interp1,其基本格式为yi=interp1(x,y,xi,'method')其中x,y表示已知的点坐标,xi表示待插的坐标,‘method’是选择的插值方法
'nearest'——最邻近插值
'linear'——线性插值
'spline'——三次样条插值
'cubic'——立方插值
示例
例
lagrange插值的函数部分
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=[0 3 5 7 9 11 12 13 14 15];
y0=[0 1.2 1.7 2 2.1 2 1.8 1.2 1 1.6];
x=0:0.1:15;
y1=lagrange(x0,y0,x);
y2=interp1(x0,y0,x);
y3=interp1(x0,y0,x,'spline');
绘图部分
subplot(3,1,1);
plot(x0,y0,'k+',x,y1,'r');
grid;
title('lagrange');
subplot(3,1,2);
plot(x0,y0,'k+',x,y2,'r');
grid;
title('piecewise linear');
subplot(3,1,3);
plot(x0,y0,'k+',x,y3,'r');
grid;
title('spline');
代码的运行结果如图

2.二维插值
二维插值命令是interp2,基本格式为zi=interp2(x,y,z,xi,yi,'method')其中z可以理解为被插值函数在(x,y)处的值;xi,yi为被插值点,zi为输出的插值结果;
'nearest'——最邻近插值
'linear'——双线性插值
'spline'——双三次样条插值
'cubic'——双立方插值
示例
数据输入
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);
插值
xi=1:0.2:5;
yi=1:0.2:3;
zi=interp2(x,y,temps,xi,yi','cubic');
figure(2);
mesh(xi,yi,zi);%插值后的图像
figure(3);
contour(xi,yi,zi,20,'r');%等高线,20表示有20条
说明:
plot3(空间曲线),mesh(空间曲面),
surf(空间曲面),contour(等高线)是三维作图中的常用命令
mesh带有网格,而surf仅有曲面表面
3.散乱点插值
之前的插值问题都是网格点,当(x,y)为散乱点时,可用griddata(x,y,z,xi,yi,'method')命令
当等高线命令为contour(xi,yi,zi,[k,k],'b')的形式时,表示画出高度为k的等高线
三、拟合
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)