当前位置:
文档之家› 数学建模常用方法MATLAB求解(好)
数学建模常用方法MATLAB求解(好)
xj 互不相同,不妨设 a x0 x1 xn b),
求任一插值点
x ( x j ) 处的插值 y * .
*
y
y0
*
y1
x0 x1 x *
xn
6
构造一个(相对简单的)函数 y f (x), 通过全部节点, 即
f ( x j ) y j ( j 0,1, n)
数学建模竞赛
1
几种常见的数学方法及软件求解
一、曲线拟合及MATLAB软件求解 已知离散点上的数据集 [( x1 , y1 )( x2 , y2 ) ( xn , yn )],
求得一解析函数y=f(x)使y=f(x)在原离散点 xi 上尽可能 接近给定 yi 的值,这一过程叫曲线拟合。最常用的 曲线拟合是最小二乘法曲线拟合,拟合结果可使误差的 平方和最小,即找出使
‘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: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= 14 10.2000 30.0000 30.9000 24.9000
11
三次样条插值
S ( x) {si ( x), x [ xi 1 , xi ], i 1, n}
1) si ( x ) ai x 3 bi x 2 ci x d i (i 1, n) 2) S ( xi ) yi (i 0,1, n) 3) S ( x ) C 2 [ x0 , xn ]
直接验证可知, Ln x 满足插值条件.
9
分段线性插值
y o
Ln ( x )
xj-1 xj xj+1 xn x
x0
y
j 0
n
j
l j ( x)
x x j 1 , x j 1 x x j n越大,误差越小. x j x j 1 x x j 1 l j ( x) , x j x x j 1 lim Ln ( x) g ( x), x0 x x j x j 1 n 0, 其它 10
lim S ( x) g ( x)
n
g(x)为被插值函数。
12
2、一维插值的MATLAB软件命令: 已知离散点上的数据集[( x1 , y1 )( x2 , y2 ) ( xn , yn )], 求得一解析函数连接自变量相邻的两个点,并求得两点 间的数值,这一过程叫插值。 MATLAB在一维插值函数interp1中,提供了四种 插值方法选择:线性插值、三次样条插值、立方插值 和最近邻点插值。interp1的本格式为: yi=interp1(x,y,xi,'method') 其中x,y分别表示数据点的横、纵坐标向量,x 必须 单调,xi为需要插值的横坐标数据(或数组),xi不能 超出x的范围,而method为可选参数,有四种选择: ‘nearest’ :最邻近插值 ‘linear’ : 线性插值; 13
>> 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,temps,t0,'spline'); >> plot(hours,temps,'+',t0,T0,hours,temps,'r:') >> xlabel('时间'); >> ylabel('温度')
si ( xi ) si 1 ( xi ), si( xi ) si1 ( xi ), si( xi ) si1 ( xi ) (i 1, , n 1)
4) S ( x0 ) S ( xn ) 0 ( 自然边界条件) 2) 3) 4) ai , bi , ci , d i S ( x)
4
画出离散点及拟合曲线: 输入命令 : >> x1=0.5:0.05:3.0; >> y1=polyval(p,x1); >> plot(x,y,'*r',x1,y1,'-b') 结果见图5.4
5
二、一维插值
1、一维插值的定义
已知 n+1个节点 ( x j , y j ) ( j 0,1, n, 其中
i 1
n
f ( xi ) yi
2
最小的f(x).
2
格式:p=polyfit(x,y,n). 说明:求出已知数据x,y 的n次拟合多项式f(x)的系 数p,x 必须是单调的。 例1 已知某函数的离散值如表
xi yi 0.5 1.75 1.0 2.45 1.5 3.81 2.0 4.80 2.5 7.00 3.0 8.65
18
例3:测得平板表面3×5网格点处的温度分别为: 82 81 80 82 84 79 63 61 65 81 84 84 82 85 86 试求在平板表面坐标为(1.5,1.5),(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]; 19
再用
f (x) 计算插值,即 y f ( x ).
* *
y
y0
*
y1
x0 x1 x *
xn
7
拉格朗日(Lagrange)插值
已知函数f(x)在n+1个点x0,x1,…,xn处的函数值为 y0,y1,…,yn 。求一n次多项式函数Pn(x),使其满足: Pn(xi)=yi,i=0,1,…,n. 解决此问题的拉格朗日插值多项式公式如下
计算量与n无关;
xn
三次样条插值
比分段线性插值更光滑。
y
a
xi-1
xi
b
x
在数学上,光滑程度的定量描述是:函数(曲 线)的k阶导数存在且连续,则称该曲线具有k阶光 滑性。 光滑性的阶次越高,则越光滑。是否存在较低 次的分段多项式达到较高阶光滑性的方法?三次 样条插值就是一个很好的例子。
>> xlabel('x轴'); >> ylabel('y轴'); >> zlabel('z轴') >> title('线性插值曲面图') 结果见图5.7
22
再输入以下命令得温度的三次样条插值曲面图: >> z=interp2(x0,y0,temps,x',y,'spline'); >> mesh(x,y,z) >> xlabel('x轴'); >> ylabel('y轴'); >> zlabel('z轴') >> title('三次样条插值曲面图') 结果见图5.7
15
>> gtext('线性插值') >> gtext('三次样条插值') 结果见图5.5
16
三、二维插值 对二维插值问题,MATLAB分别给出了针对插值基 点为网格节点的插值函数及针对插值基点为散乱节点的 插值函数调用格式。 1、 用MATLAB作网格节点数据的插值
已知m n个节点:(xi ,yj ,zij ),(i=1,2, m; j 1, 2,, n)
23
例 4 山区地貌: 在某山区测得一些地点的高程如下表。平面区域 为 1200<=x<=4000,1200<=y<=3600) 试作出该山区的地貌图和等高线图,并对几种插值方 法进行比较。
Y x
0 400 800 1200 1600 2000 2400 2800 3200 3600 4000 4400 4800
mesh(x0,y0,temps) 结果见图5.6
分别用线性性插值和三次样条插值求已知点的温度。
输入命令 :
20
>> t=interp2(x0,y0,temps,[1.5 2 2.5 3.5],[1.5 1.6 2 4.5],'liner')
t=
76.2500 70.2000 62.0000 T= NaN
称为拉格朗日插值基函数。
8
拉格朗日(Lagrange)插值
特别地: 两点一次(线性)插值多项式:
x x0 x x1 L1 x y0 y1 x0 x1 x1 x0
三点二次(抛物)插值多项式:
x x1 x x2 y x x0 x x2 y x x0 x x1 y L2 x 0 1 2 x0 x1 x0 x2 x1 x0 x1 x2 x2 x0 x2 x1