数学建模学习笔记day7——插值和拟合

目录

  • 一、插值
    • 1.拉格朗日插值法
    • 2.高次插值的Runge现象
  • 二、matlab插值计算
    • 1.一维插值
    • 2.二维插值
    • 3.散乱点插值
  • 三、拟合

插值与拟合时数学建模中的一种基本的数据分析手段,被公认为建模中的常用算法之一。
介绍插值问题,插值原理,高次插值的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=0kyj=ixixjxxj

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');

代码的运行结果如图
数学建模学习笔记day7——插值和拟合_第1张图片

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的等高线

三、拟合

你可能感兴趣的:(学习笔记,算法,学习,matlab)