《常用方法MATLAB求解.》由会员分享,可在线阅读,更多相关《常用方法MATLAB求解.(66页珍藏版)》请在金锄头文库上搜索。
1、1 数学建模竞赛 2 一、曲线拟合及MATLAB软件求解 已知离散点上的数据集 求得一解析函数y=f(x)使y=f(x)在原离散点 接近给定 曲线拟合是最小二乘法曲线拟合,拟合结果可使误差的 上尽可能 的值,这一过程叫曲线拟合。最常用的 平方和最小,即找出使 最小的f(x). 几种常见的数学方法及软件求解 3 格式:p=polyfit(x,y,n). 说明:求出已知数据x,y 的n次拟合多项式f(x)的系 数p,x 必须是单调的。 例1 已知某函数的离散值如表 xi0.51.01.52.02.53.0 yi1.752.453.814.807.008.65 求二次拟合多项式. 先画函数离散点的图
2、形 输入命令 : x=0.5 1.0 1.5 2.0 2.5 3.0; y=1.75 2.45 3.81 4.80 7.00 8.60; scatter(x,y,5) 结果见图 4 由图可看出可用二次多项式拟合。 再输入命令 : p=polyfit(x,y,2) p = 0.5614 0.8287 1.1560 即二次拟合多项式为 5 画出离散点及拟合曲线: 输入命令 : x1=0.5:0.05:3.0; y1=polyval(p,x1); plot(x,y,*r,x1,y1,-b) 结果见图5.4 6 1、一维插值的定义 已知 n+1个节点其中 互不相同,不妨设 求任一插值点处的插值 二、一
3、维插值 7 构造一个(相对简单的)函数通过全部节点, 即 再用计算插值,即 8 称为拉格朗日插值基函数。 已知函数f(x)在n+1个点x0,x1,xn处的函数值为 y0,y1,yn 。求一n次多项式函数Pn(x),使其满足: Pn(xi)=yi,i=0,1,n. 解决此问题的拉格朗日插值多项式公式如下 其中Li(x) 为n次多项式: 拉格朗日(Lagrange)插值 9 拉格朗日(Lagrange)插值 特别地: 两点一次(线性)插值多项式: 三点二次(抛物)插值多项式: 10 分段线性插值 计算量与n无关; n越大,误差越小. xjxj-1xj+1x0 xnx o y 11 比分段线性插值更
4、光滑。 x y xi-1 xiab 在数学上,光滑程度的定量描述是:函数(曲 线)的k阶导数存在且连续,则称该曲线具有k阶光 滑性。 光滑性的阶次越高,则越光滑。是否存在较低 次的分段多项式达到较高阶光滑性的方法?三次 样条插值就是一个很好的例子。 三次样条插值 12 三次样条插值 g(x)为被插值函数。 13 2、一维插值的MATLAB软件命令: 已知离散点上的数据集 求得一解析函数连接自变量相邻的两个点,并求得两点 间的数值,这一过程叫插值。 MATLAB在一维插值函数interp1中,提供了四种 插值方法选择:线性插值、三次样条插值、立方插值 和最近邻点插值。interp1的本格式为:
5、yi=interp1(x,y,xi,method) 其中x,y分别表示数据点的横、纵坐标向量,x 必须 单调,xi为需要插值的横坐标数据(或数组),xi不能 超出x的范围,而method为可选参数,有四种选择: nearest :最邻近插值 linear : 线性插值; 14 spline : 三次样条插值; cubic : 立方插值。 缺省时: 分段线性插值。 例2 在1-12的11小时内,每隔1小时测量一次温度,测 得的温度依次为:5,8,9,15,25,29,31,30, 22,25,27,24。试估计在 3.2,6.5,7.1,11.7小时的温 度值。 解 输入命令 : hours=1
6、:12; temps=5 8 9 15 25 29 31 30 22 25 27 24; t=interp1(hours,temps,3.2 6.5 7.1 11.7) %线性插值 t = 10.2000 30.0000 30.9000 24.9000 15 T=interp1(hours,temps,3.2 6.5 7.1 11.7,spline) %三次样条插值 T = 9.6734 30.0427 31.1755 25.3820 比较发现,两种结果有差异,这是因为插值是一 个估计或猜测的过程。 两种插值的画图如下; 输入命令 : t0=1:0.1:12; T0=interp1(hours
7、,temps,t0,spline); plot(hours,temps,+,t0,T0,hours,temps,r:) xlabel(时间); ylabel(温度) 16 gtext(线性插值) gtext(三次样条插值) 结果见图5.5 17 三、二维插值 对二维插值问题,MATLAB分别给出了针对插值基 点为网格节点的插值函数及针对插值基点为散乱节点的 插值函数调用格式。 1、 用MATLAB作网格节点数据的插值 对上述问题,MATLAB提供了二维插值函数 interp2,其基本格式为: 18 z=interp2(x0,y0,z0,x,y,method) 其中x0,y0是自变量。X0,y0
8、的分量值必须是单调 递增的。X0和y0分别是m维和n维向量,分别表示已 知数据点的横、纵坐标向量,z0是m*n维矩阵,标明 相应于所给数据网格点的函数值。向量x,y是待求函数 值所给定网格点的的横、纵坐标向量,x,y的值分别不 能超出x0,y0的范围。 而method为可选参数,有四种选择: nearest 最邻近插值 linear 线性插值 spline 三次样条插值 cubic 三次插值 缺省时, 是线性插值 19 例3:测得平板表面35网格点处的温度分别为: 82 81 80 82 84 79 63 61 65 81 84 84 82 85 86 试求在平板表面坐标为(1.5,1.5),
9、(2,1.6),(2.5,2) (3.5,4.5)处的温度,并作平板表面的温度分布曲面 z=f(x,y)的图形, (1)先在三维坐标画出原始数据,画出粗糙的温 度分布曲图. 输入以下命令: x0=1:5; y0=1:3; temps=82 81 80 82 84;79 63 61 65 81;84 84 82 85 86; 20 mesh(x0,y0,temps) 结果见图5.6 分别用线性性插值和三次样条插值求已知点的温度。 输入命令 : 21 t=interp2(x0,y0,temps,1.5 2 2.5 3.5,1.5 1.6 2 4.5,liner) t = 76.2500 70.20
10、00 62.0000 NaN T=interp2(x0,y0,temps,1.5 2 2.5 3.5,1.5 1.6 2 4.5,spline) T = 71.4531 65.5200 60.9688 188.8906 (2)以平滑数据,在x、y方向上每隔0.2个单位的地方 进行插值画出线性和三次样条插值的温度分布曲面图. 输入以下命令得温度的线性插值曲面图: x=1:0.2:5; y=1:0.2:3; z=interp2(x0,y0,temps,x,y,linear); mesh(x,y,z) 22 xlabel(x轴); ylabel(y轴); zlabel(z轴) title(线性插值曲
11、面图) 结果见图5.7 23 再输入以下命令得温度的三次样条插值曲面图: z=interp2(x0,y0,temps,x,y,spline); mesh(x,y,z) xlabel(x轴); ylabel(y轴); zlabel(z轴) title(三次样条插值曲面图) 结果见图5.7 24 例 4 山区地貌: 在某山区测得一些地点的高程如下表。平面区域 为 1200=x=4000,1200 x0=0:400:5600; y0=0:400:4800; z0=370 470 550 600 670 690 670 620 580 450 400 300 100 150 250;. 510 620
12、 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 1
13、060 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 12
14、00 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; 26 meshz(x0,y0,z0) xlabel(x轴); ylabel(y轴); zlabel(z轴) title(原始数据山区表面图) 结果见图5.8 27 (1)线性插值 输入命令 : z2=interp2(x0,y0,z0,x,y,linear); surfc(x,y,z2) xlabel(x轴); ylabel(y轴)