数学建模 数学实验 插值及案例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
被插值点 的函数值 插值节点 被插值点
插值方法
注:要求x0,y0单调;x, y可取为矩阵,或x取行向 量,y取为列向量,x,y的 值分别不能超出x0,y0的范
围.
‘nearest’ 最邻近插值; ‘linear’ 双线性插值; ‘cubic’ 双三次插值;
缺省时 双线性插值.
例 用以上4种方法对 z xe(x2 y2 )在[-2,2 ]上的二维多项
插值方法
注:要求cx 取行向量,cy
取为列向量.
‘nearest’最邻近插值 ‘linear’ 双线性插值 ‘cubic’ 双三次插值 'v4'- MATLAB提供的插
值方法 缺省时, 双线性插值
例 在某海域测得一些点(x,y)处的水深z由下表 给出,船的吃水深度为5英尺,在矩形区域(75,200) ×(-50,150)里的哪些地方船要避免进入.
700 850 950 1010 1070 1550 980
通过此例对最近邻点插值、双线性插值方法和双三次插值方法的插 值效果进行比较.
用MATLAB作二维插值计算
插值点为散乱节点的实现: cz =griddata(x,y,z,cx,cy,‘method’)
被插值点 的函数值
插值节点
被插值点
例 测得平板表面3×5网格点处的温度分别为: 82 81 80 82 84 79 63 61 65 81 84 84 82 85 86
试作出平板表面的温度分布曲面z=f(x,y)的图形.
解:1.先在三维坐标画出原始数据,画出粗糙的温度分布曲 线图.
输入以下命令: y=1:5; x=1:3; temps=[82 81 80 82 84;79 63 61 65 81;84 84 82 85 86]; mesh(x,y,temps)
Βιβλιοθήκη Baidu
例 从1点12点的11小时内,每隔1小时测量一次温度, 测得的温度的数值依次为:5,8,9,15,25,29, 31,30,22,25,27,24.试估计每隔1/10小时的 温度值.
解: 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,'+',h,t,hours,temps,'r:') xlabel('Hour'),ylabel('Degrees’)
二、基本概念
在工程实践和科学实验中,常常需要从一组实 验观测数据,揭示自变量x与因变量y之间的关系,使 所得到的近似函数与已知数据有较高的拟合精度。通 常可以采用两种方法:曲线插值和拟合.
若要求这个近似函数经过已知的所有数据点,则 称此类问题为插值问题。 (不需要函数表达式)
注:插值问题不一定得到近似函数的表达形式,仅 通过插值方法找到未知点对应的值。
‘cubic’or‘pchip’:分段三次Hermite插值,确 定三次Hermite函数,根据该函数确定插值点的函数 值。
缺省时 表示分段线性插值。
例 用以上4种方法对y=cosx在[0,6]上的一维插值效果进行比较。 x=0:6; y=cos(x); xi=0:.25:6; yi1=interp1(x,y,xi,'nearest'); yi2=interp1(x,y,xi,'linear'); yi3=interp1(x,y,xi,'spline'); yi4=interp1(x,y,xi,‘pchip‘or’cubic’); plot(x,y,'ro',xi,yi1,'--',xi,yi2,'-',xi,yi3,'k.-',xi,yi4,'m:') legend(‘原始数据’,‘最近点插值’,‘线性插值’,’样 条插值‘,’立方插值’)
试作出该山区的地貌图和等高线图,并对几种插值方法进行比较。
X Y
1200 1600 2000 2400 2800 3200 3600
1200
1130 1320 1390 1500 1500 1500 1480
1600
1250 1450 1500 1200 1200 1550 1500
2000
1280 1420 1500 1100 1100 1600 1550
式插值效果进行比较。
t=-2:0.5:2 [x,y]=meshgrid(t); z=x.*exp(-x.^2-y.^2); [x1,y1]=meshgrid(-2:0.1:2); z1=x1.*exp(-x1.^2-y1.^2); figure(1) subplot(1,2,1),mesh(x,y,z),title(‘数据点') subplot(1,2,2),mesh(x1,y1,z1),title(‘函数图象')
四、插值方法及MATLAB求解
插值方法
选用不同类型的插值函数,逼近的效 果就不同,一般有:
拉格朗日插值(lagrange插值) 分段线性插值 Hermite 三次样条插值。
MATLAB实现插值
MATLAB自身提供了如下内部的功能函数: 一维插值函数:interp1() 二维插值函数:intep2() 三维插值函数: interp3() n维插值函数: intern()
x 129 140 103.5 88 185.5 195 105
y 7.5 141.5 23 147 22.5 137.5 85.5
z4
8
686
8
8
x 157.5 107.5 77 81 162 162 117.5
y -6.5 -81 3 56.5 -66.5 84 -33.5
z9
9
88
94
9
解:1.输入插值基点数据 2.在矩形区域(75,200)×(-50,150)进行插值。 3. 作海底曲面图 4.作出水深小于5的海域范围,即z=5的等高线.
%插值并作海底曲面图
x =[129.0 140.0 103.5 88.0 185.5 195.0 105.5 157.5 107.5 77.0 81.0 162.0 162.0 117.5 ];
y =[ 7.5 141.5 23.0 147.0 22.5 137.5 85.5 -6.5 -81 3.0 56.5 -66.5 84.0 33.5 ];
2.以平滑数据,在 x、y方向上每隔0.2个单位的地方进行插值.
再输入以下命令: xi=1:0.2:5; yi=1:0.2:3; zi=interp2(x,y,temps,xi,yi’,'cubic'); mesh(xi,yi,zi) 画出插值后的温度分布曲面图.
练习 山区地貌问题
在某山区测得一些地点的高程如下表。平面区域为 1200<=x<=4000,1200<=y<=3600)
%作图
练习 已知飞机下轮廓线上数据如下,求x每改变0.1时的y 值.
X 0 3 5 7 9 11 12 13 14 15 Y 0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6
y
机翼下 轮廓线
x
用MATLAB作二维插值计算
插值节点为网格节点数据的实现:
z=interp2(x0,y0,z0,x,y,’method’)
2400
1230 1400 1400 1350 1550 1550 1510
2800
1040 1300 900 1450 1600 1600 1430
3200
900 700 1100 1200 1550 1600 1300
3600
500 900 1060 1150 1380 1600 1200
4000
插值在工程实践和科学实验中有着非常广泛而又 十分重要的应用,例如,信息技术中的图像重建、图 像放大中为避免图像的扭曲失真的插值补点、建筑工 程的外观设计。化学工程实验数据与模型的分析、天 文观测数据、地理信息数据的处理如(天气预报)以 及社会经济现象的统计分析等等。
插值方法在数学建模竞赛中也发挥着重要的作用, 历年很多赛题中如与图形处理有关的问题很多与插值 有关系,例如98年美国赛A题,生物组织切片的三维 插值处理,94年A题逢山开路,山体海拔高度的插值 计算, 2005年的雨量预报的评价的插值计算等。
缺省时 分段线性插值.
参数‘method’的进一步说明
‘nearest’:最近点插值,插值点处的值取与该插 值点距离最近的数据点函数值;
‘linear’:分段线性插值,用直线连接数据点,插 值点的值取对应直线上的值;
‘spline’:三次样条函数插值,该方法用三次样条 曲线通过数据点,插值点处的值取对应曲线上的值;
[xi,yi]=meshgrid(-2:.125:2); zi1=interp2(x,y,z,xi,yi,'nearest'); zi2=interp2(x,y,z,xi,yi,'linear'); zi3=interp2(x,y,z,xi,yi,'spline'); zi4=interp2(x,y,z,xi,yi,'cubic');
用MATLAB作一维插值计算
一维插值的实现: yi=interp1(x,y,xi,'method')
xi的插 值结果
已知插值节点 需要插值节点 插值方法
注意:所有的插值方
法都要求x是单调的, 并且xi不能够超过x的 范围.
‘nearest’ 最邻近插值; ‘linear’ 线性插值; ‘spline’ 三次样条插值; ‘cubic’ 立方插值;
figure(2) subplot(221),mesh(xi,yi,zi1),title(‘最近点插值') subplot(222),mesh(xi,yi,zi2),title(‘线性插值') subplot(223),mesh(xi,yi,zi3),title(‘样条插值') subplot(224),mesh(xi,yi,zi4),title(‘立方插值')
z =-[ 4 8 6 8 6 8 8 9 9 8 8 9 4 9 ];
x1=75:5:200;
y1=-50:5:150;
z1=griddata(x,y,z,x1,y1’,‘cubic');
surf(x1,y1,z1)
%插值并作出水深小于5的海域范围
x1=75:1:200; y1=-50:1:150; z1=griddata(x,y,z,x1,y1’,‘cubic'); contour(x1,y1,z1,[-5,-5],’r’);grid Hold on plot(x,y,'+') xlabel('X'),ylabel('Y')