
matlab插值与拟合(命与示例)(精品).doc
19页目录【一维插值】interp1 1yi = interp1(x,y,xi,method) 1例1 1例2 2【二维插值】interp2 3ZI = interp2(X,Y,Z,XI,YI,method) 3插值方式比较示例 3例3 3例4 3【三角测量和分散数据插值】 3【数据拟合】 3例5 3例6 3【一维插值】interp1yi = 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.mhours=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.mx0=[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') 【二维插值】interp2ZI = interp2(X,Y,Z,XI,YI,method)插值方式比较示例l 用较大间隔产生peaks函数数据点[x,y] = meshgrid(-3:1:3);z = peaks(x,y);surf(x,y,z) l 产生一个较好的网格[xi,yi] = meshgrid(-3:0.25:3); l 利用最近邻方式插值zi1 = interp2(x,y,z,xi,yi,'nearest');surf(xi,yi,zi1) l 双线性插值方式zi2 = interp2(x,y,z,xi,yi,'bilinear');surf(xi,yi,zi2) l 双立方插值方式zi3 = interp2(x,y,z,xi,yi,'bicubic');surf(xi,yi,zi3) l 不同插值方式构造的等高线图对比contour(xi,yi,zi1) contour(xi,yi,zi2) contour(xi,yi,zi3) 例3测得平板表面3*5网格点处的温度分别为:82 81 80 82 8479 63 61 65 8184 84 82 85 86试作出平板表面的温度分布曲面z=f(x,y)的图形。
建立M文件wendu.mxi=1:0.2:5;yi=1:0.2:3;zi=interp2(x,y,temps,xi',yi,'cubic');mesh(xi,yi,zi); 例4某山区测得一些地点的高度如下表所示,平面区域为,试作出该山区的地貌图和等高线图比较几种插值方法建立M文件moutain.mx=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 1500 1200 1100 1350 1450 1200 1150 1010 880 1000 1050 1100;... 950 1190 1370 1500 1200 1100 1550 1600 1550 1380 1070 900 1050 1150 1200;... 1430 1430 1460 1500 1550 1600 1550 1600 1600 1600 1550 1500 1500 1550 1550;... 1420 1430 1450 1480 1500 1550 1510 1430 1300 1200 980 850 750 550 500;... 1380 1410 1430 1450 1470 1320 1280 1200 1080 940 780 620 460 370 350;... 1370 1390 1410 1430 1440 1140 1110 1050 950 820 690 540 380 300 210;... 1350 1370 1390 1400 1410 960 940 880 800 690 570 430 290 210 150];figure(1);meshz(x,y,z) xi=0:50:5600;yi=0:50:4800;figure(2)z1i=interp2(x,y,z,xi,yi','nearest');surfc(xi,yi,z1i) figure(3)z2i=interp2(x,y,z,xi,yi');surfc(xi,yi,z2i) figure(4)z3i=interp2(x,y,z,xi,yi','cubic');surfc(xi,yi,z3i) figure(5)subplot(1,2,1),contour(xi,yi,z2i,10);subplot(1,2,2),contour(xi,yi,z3i,10); 【三角测量和分散数据插值】凸包(Convex Hulls)load seamountplot(x,y,'.','markersize',10)k = convhull(x,y);hold on, plot(x(k),y(k),'-r'), hold offgrid on 德洛涅三角(Delaunay Triangulation)load seamountplot(x,y,'.','markersize',12)xlabel('Longitude'), ylabel('Latitude')grid on tri = delaunay(x,y);hold on, triplot(tri,x,y), hold off figurehidden ontrimesh(tri,x,y,z)grid onxlabel('Longitude'); ylabel('Latitude'); zlabel('Depth in Feet') figure[xi,yi] = meshgrid(210.8:.01:211.8,-48.5:.01:-47.9);zi = griddata(x,y,z,xi,yi,'cubic');[c,h] = contour(xi,yi,zi,'b-');clabel(c,h)xlabel('Longitude'), ylabel('Latitude') 火龙尼图形(Voronoi Diagrams)load seamountvoronoi(x,y)grid onxlabel('Longitude'), ylabel('Latitude') 【数据拟合】例5对下面一组数据作二次多项式拟合x=[0.1 0.2 0.4:.1:1];y=[1.978 3.28 6.16 7.34 7.66 9.58 9.48 9.30 11.2];A=polyfit(x,y,2);z=polyval(A,x);plot(x,y,'k+',x,z,'r') 例6用下面一组数据拟合中的参数a,b,k。
方法1:用lsqcurvefit建立M文件curvefun1.mfunction f=curvefun1(x,tdata)f=x(1)+x(2)*exp(-0.02*x(3)*tdata) %其中 x(1)=a; x(2)=b;x(3)=k;输入命令:tdata=100:100:1000;cdata=1e-03*[4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50,6.59];x0=[0.2,0.05,0.05];x=lsqcurvefit ('curvefun1',x0,tdata,cdata) x = 0.0063 -0.0034 0.2542 方法2:用lsqnonlin建立M文件curvefun2.mfunction f=curvefun2(x)tdata=100:100:1000;cdata=1e-03*[4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50,6.59];f=x(1)+x(2)*exp(-0.02*x(3)*tdata)- cdata输入命令:x0=[0.2,0.05,0.05];x=lsqnonlin('curvefun2',x0)x = 0.0063 -0.0034 0.2542 。
