实验报告
§3.8 数据插值与拟合实验
一、实验目的及意义
[1] 了解插值、最小二乘拟合的基本原理
[2] 掌握用MATLAB计算一维插值和两种二维插值的方法;
[3] 掌握用MATLAB作最小二乘多项式拟合和曲线拟合的方法。
二、实验内容
1.针对实际问题,试建立数学模型。
用MATLAB计算一维插值和两种二维插值的方法求解;
1.用MATLAB中的函数作一元函数的多项式拟合与曲线拟合,作出误差图;
2.用MATLAB中的函数作二元函数的最小二乘拟合,作出误差图;
3.针对预测和确定参数的实际问题,建立数学模型,并求解。
三、实验步骤
1.开启软件平台——MATLAB,开启MATLAB编辑窗口;
2.根据各种数值解法步骤编写M文件
3.保存文件并运行;
4.观察运行结果(数值或图形);
5.根据观察到的结果写出实验报告,并浅谈学习心得体会。
四、实验要求与任务
根据实验内容和步骤,完成以下具体实验,要求写出实验报告(实验目的→问题→数学模型→算法与编程→计算结果→分析、检验和结论→心得体会)
1.山区地貌:在某山区测得一些地点的高程如下表3.8。
平面区域为:
1200<=x<=4000,1200<=y<=3600)
试作出该山区的地貌图和等高线图,并对几种插值方法进行比较。
x0=1200:400:4000;
y0=1200:400:3600;
z0=[1130,1250,1280,1230,1040,900,500,700;
1320,1450,1420,1400,1300,700,900,850;
1390,1500,1500,1400,900,1100,1060,950;
1500,1200,1100,1350,1450,1200,1150,1010;
1500,1200,1100,1550,1600,1550,1380,1070;
1500,1550,1600,1550,1600,1600,1600,1550;
1480,1500,1550,1510,1430,1300,1200,980];
meshc(x0,y0,z0)
xlabel('x');
ylabel('y');
zlabel('z')
title('原始图')
分段线性插值
输入命令:
[xi2,yi2]=meshgrid(1200:10:4000,1200:10:3600); zi2=interp2(x0,y0,z0,xi2,yi2,'linear');
meshc(xi2,yi2,zi2)
xlabel('x');
ylabel('y');
zlabel('z')
title('插值后')
三次样条插值
输入命令:
[xi,yi]=meshgrid(1200:10:4000,1200:10:3600);
zi=interp2(x0,y0,z0,xi,yi,'spline');
meshc(xi,yi,zi),
title('三次样条插值表面图')
xlabel('x');ylabel('y');zlabel('z')
双三次插值
输入命令:
[xi,yi]=meshgrid(1200:10:4000,1200:10:3600); zi=interp2(x0,y0,z0,xi,yi,'cubic');
meshc(xi,yi,zi),
title('双三次插值后的表面图')
xlabel('x轴');
ylabel('y轴');
zlabel('z轴')
画等高线图:
n=9;
pcolor(x0,y0,z0)
shading interp
zmax=max(max(z0));zmin=min(min(z0));
caxis([zmin,zmax])
colorbar
hold on
C=contour(x0,y0,z0,n,'k:');
clabel(C)
title('未拟合图形')
hold off
pcolor(xi,yi,zi)
shading interp
zmax1=max(max(zi));zmin1=min(min(zi));
caxis([zmin1,zmax1])
colorbar
hold on
C=contour(xi,yi,zi,n,'k:');
clabel(C)
title('拟合图形')
hold off
相应的图形中都画出了地貌图和等高线,在以上的三种插值方法中,最为精确的
要属双三次插值方法,可能在间隔取值较小时,它与三次样条插值所绘出的图形差异不大,不很明显。
2.某年美国旧车价格的调查资料如下表所示,其中下xi表示轿车的使用年数,yi表示相应的平均价格。
试分析用什么形式的曲线来拟合上述的数据,并计算使用4.5年后轿车的平均价格大致为多少?
x
1 2 3 4 5 6 7 8 9 10
i
y
2615 1943 1494 1087 765 538 484 290 226 204
i
解:
通过以上数据产生其粗糙的曲线:
xi=1:10;
yi=[2615,1943,1494,1087,765,538,484,290,226,204];
plot(xi,yi,'.')
对上图分析,假设轿车的价格与时间的关系为:yi=a*exp(-b*xi)
则:
x_ex2=[1 2 3 4 5 6 7 8 9 10];
y_ex2=[2615 1943 1494 1087 765 538 484 290 226 204];
plot(x_ex2,y_ex2,'o') %%先画出原始数据的散点图,以便于后续的观察
grid on
hold on
%%假设售价与时间是指数关系即:y=a*exp(b*x)
Y_ex2=log(y_ex2); %%将函数进行转换,把函数转换成Y=b*x+Lna这样一个%%
一次函数
aa=polyfit(x_ex2,Y_ex2,1) %%用多项式拟合求解系数a,b
a=exp(aa(2));
b=aa(1);
y1_ex2=a*exp(b*x_ex2);
plot(x_ex2,y1_ex2) %%画出拟合后的曲线
xlabel('年数')
ylabel('销售价格')
title('拟合后的函数与原始数据的比较图')
hold off
grid off
y45_ex2=exp(polyval(aa,4.5)) %%计算在4.5年时的汽车的销售价格
aa =
-0.2969 8.1591
y45_ex2 =
918.6543
结论:轿车的销售价格和使用时间呈现指数关系,在使用4.5年后,汽车的平均售价为918.7元。