matlab插值与拟合(命令与示例)
目录
【一维插值】interp11
yi = interp1(x,y,xi,method)1
例11
例22
【二维插值】interp23
ZI = interp2(X,Y,Z,XI,YI,method)3
插值方式比较示例3
例33
例43
【三角测量和分散数据插值】3
【数据拟合】3
例53
例63
【一维插值】interp1
yi = interp1(x,y,xi,method)
例1
在1-12的11小时内,每隔1小时测量一次温度,测得的温度依次为:5,8,9,15,25,29,31,30,22,25,27,24。试估计每隔1/10小时的温度值。
建立M文件temp.m
hours=1:12;
temps=[5 8 9 15 25 29 31 30 22 25 27 24];
h=1:0.1:12;
t=interp1(hours,temps,h,'spline');
plot(hours,temps,'kp',h,t,'b');
例2
已知飞机下轮廓线上数据如下,求x每改变0.1时的y值。
建立M文件plane.m
x0=[0 3 5 7 9 11 12 13 14 15 ];
y0=[0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6 ];
x=0:0.1:15;
y1=interp1(x0,y0,x,'nearest');
y2=interp1(x0,y0,x);
y3=interp1(x0,y0,x,'spline');
plot(x0,y0,'kp',x,y1,'r')
plot(x0,y0,'kp',x,y2,'r')
plot(x0,y0,'kp',x,y3,'r')
【二维插值】interp2
ZI = interp2(X,Y,Z,XI,YI,method)
插值方式比较示例
用较大间隔产生peaks函数数据点
[x,y] = meshgrid(-3:1:3);
z = peaks(x,y);
surf(x,y,z)
产生一个较好的网格
[xi,yi] = meshgrid(-3:0.25:3);
利用最近邻方式插值
zi1 = interp2(x,y,z,xi,yi,'nearest');surf(xi,yi,zi1)
双线性插值方式
zi2 = interp2(x,y,z,xi,yi,'bilinear');surf(xi,yi,zi2)
双立方插值方式
zi3 = interp2(x,y,z,xi,yi,'bicubic');surf(xi,yi,zi3)
不同插值方式构造的等高线图对比
contour(xi,yi,zi1)
contour(xi,yi,zi2)
contour(xi,yi,zi3)
例3
测得平板表面3*5网格点处的温度分别为:
82 81 80 82 84
79 63 61 65 81
84 84 82 85 86
试作出平板表面的温度分布曲面z=f(x,y)的图形。
建立M文件wendu.m
xi=1:0.2:5;
yi=1:0.2:3;
zi=interp2(x,y,temps,xi',yi,'cubic');
mesh(xi,yi,zi);
例4
某山区测得一些地点的高度如下表所示,平面区域为,试作出该山区的地貌图和等高线图。比较几种插值方法。
建立M文件moutain.m
x=0:400:5600;
y=0:400:4800;
z=[370 470 550 600 670 690 670 620 580 450 400 300 100 150 250;...
510 620 730 800 850 870 850 780 720 650 500 200 300 350 320;...
650 760 880 970 1020 1050 1020 830 900 700 300 500 550 480 350;...
740 880 1080 1130 1250 1280 1230 1040 900 500 700 780 750 650 550;...
830 980 1180 1320 1450 1420 1400 1300 700 900 850 840 380 780 750;...
880 1060 1230 1390 1500 1500 1400 900 1100 1060 950 870 900 930 950;...
910 1090 1270 15