数学建模常用方法MATLAB求解(好)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
>> T=interp2(x0,y0,temps,[1.5 2 2.5 3.5],[1.5 1.6 2 4.5],'spline')
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) 21
0
400 800 1200 1600 2000 2400 2800 3200 3600 4000 4400 4800 5200 5600
300 200 500 780 840 870 880 900 1500 850 620 540 430 100 300 550 750 380 900 1000 1050 1500 750 460 380 290 150 350 480 650 780 930 1050 1150 1550 550 370 300 210 250 320 350 550 750 950 1100 1200 1550 500 350 210 150
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
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)
数学建模竞赛
1
几种常见的数学方法及软件求解
一、曲线拟合及MATLAB软件求解 已知离散点上的数据集 [( x1 , y1 )( x2 , y2 ) ( xn , yn )],
求得一解析函数y=f(x)使y=f(x)在原离散点 xi 上尽可能 接近给定 yi 的值,这一过程叫曲线拟合。最常用的 曲线拟合是最小二乘法曲线拟合,拟合结果可使误差的 平方和最小,即找出使
>> 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
Fra Baidu bibliotek
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)
Pn ( x ) L i ( x ) y i
i 0
n
其中Li(x) 为n次多项式:
( x x 0 )( x x 1 ) ( x x i 1 )( x x i 1 ) ( x x n ) L i (x) ( x i x 0 )( x i x 1 ) ( x i x i 1 )( x i x i 1 ) ( x i x n )
且x1 x2 xn ;
y1 y2 yn ,
求点( x* , y* )( ( xi , y j ))处的插值z *.
对上述问题,MATLAB提供了二维插值函数 interp2,其基本格式为:
17
z=interp2(x0,y0,z0,x,y,’method’) 其中x0,y0是自变量。X0,y0的分量值必须是单调 递增的。X0和y0分别是m维和n维向量,分别表示已 知数据点的横、纵坐标向量,z0是m*n维矩阵,标明 相应于所给数据网格点的函数值。向量x,y是待求函数 值所给定网格点的的横、纵坐标向量,x,y的值分别不 能超出x0,y0的范围。 而method为可选参数,有四种选择: ‘nearest’ 最邻近插值 ‘linear’ 线性插值 ‘spline’ 三次样条插值 ‘cubic’ 三次插值 缺省时, 是线性插值
>> 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('温度')
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, 其中
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 ]
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
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阶光 滑性。 光滑性的阶次越高,则越光滑。是否存在较低 次的分段多项式达到较高阶光滑性的方法?三次 样条插值就是一个很好的例子。
直接验证可知, 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
23
例 4 山区地貌: 在某山区测得一些地点的高程如下表。平面区域 为 1200<=x<=4000,1200<=y<=3600) 试作出该山区的地貌图和等高线图,并对几种插值方 法进行比较。
Y x
0 400 800 1200 1600 2000 2400 2800 3200 3600 4000 4400 4800
‘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
求二次拟合多项式. 先画函数离散点的图形 输入命令 : >> 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) 结果见图
3
由图可看出可用二次多项式拟合。 再输入命令 : >> p=polyfit(x,y,2) p= 0.5614 0.8287 1.1560 即二次拟合多项式为 f ( x) 0.5614 x 2 0.8287 x 1.1560
称为拉格朗日插值基函数。
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
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
15
>> gtext('线性插值') >> gtext('三次样条插值') 结果见图5.5
16
三、二维插值 对二维插值问题,MATLAB分别给出了针对插值基 点为网格节点的插值函数及针对插值基点为散乱节点的 插值函数调用格式。 1、 用MATLAB作网格节点数据的插值
已知m n个节点:(xi ,yj ,zij ),(i=1,2, m; j 1, 2,, n)
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) 21
0
400 800 1200 1600 2000 2400 2800 3200 3600 4000 4400 4800 5200 5600
300 200 500 780 840 870 880 900 1500 850 620 540 430 100 300 550 750 380 900 1000 1050 1500 750 460 380 290 150 350 480 650 780 930 1050 1150 1550 550 370 300 210 250 320 350 550 750 950 1100 1200 1550 500 350 210 150
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
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)
数学建模竞赛
1
几种常见的数学方法及软件求解
一、曲线拟合及MATLAB软件求解 已知离散点上的数据集 [( x1 , y1 )( x2 , y2 ) ( xn , yn )],
求得一解析函数y=f(x)使y=f(x)在原离散点 xi 上尽可能 接近给定 yi 的值,这一过程叫曲线拟合。最常用的 曲线拟合是最小二乘法曲线拟合,拟合结果可使误差的 平方和最小,即找出使
>> 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
Fra Baidu bibliotek
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)
Pn ( x ) L i ( x ) y i
i 0
n
其中Li(x) 为n次多项式:
( x x 0 )( x x 1 ) ( x x i 1 )( x x i 1 ) ( x x n ) L i (x) ( x i x 0 )( x i x 1 ) ( x i x i 1 )( x i x i 1 ) ( x i x n )
且x1 x2 xn ;
y1 y2 yn ,
求点( x* , y* )( ( xi , y j ))处的插值z *.
对上述问题,MATLAB提供了二维插值函数 interp2,其基本格式为:
17
z=interp2(x0,y0,z0,x,y,’method’) 其中x0,y0是自变量。X0,y0的分量值必须是单调 递增的。X0和y0分别是m维和n维向量,分别表示已 知数据点的横、纵坐标向量,z0是m*n维矩阵,标明 相应于所给数据网格点的函数值。向量x,y是待求函数 值所给定网格点的的横、纵坐标向量,x,y的值分别不 能超出x0,y0的范围。 而method为可选参数,有四种选择: ‘nearest’ 最邻近插值 ‘linear’ 线性插值 ‘spline’ 三次样条插值 ‘cubic’ 三次插值 缺省时, 是线性插值
>> 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('温度')
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, 其中
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 ]
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
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阶光 滑性。 光滑性的阶次越高,则越光滑。是否存在较低 次的分段多项式达到较高阶光滑性的方法?三次 样条插值就是一个很好的例子。
直接验证可知, 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
23
例 4 山区地貌: 在某山区测得一些地点的高程如下表。平面区域 为 1200<=x<=4000,1200<=y<=3600) 试作出该山区的地貌图和等高线图,并对几种插值方 法进行比较。
Y x
0 400 800 1200 1600 2000 2400 2800 3200 3600 4000 4400 4800
‘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
求二次拟合多项式. 先画函数离散点的图形 输入命令 : >> 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) 结果见图
3
由图可看出可用二次多项式拟合。 再输入命令 : >> p=polyfit(x,y,2) p= 0.5614 0.8287 1.1560 即二次拟合多项式为 f ( x) 0.5614 x 2 0.8287 x 1.1560
称为拉格朗日插值基函数。
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
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
15
>> gtext('线性插值') >> gtext('三次样条插值') 结果见图5.5
16
三、二维插值 对二维插值问题,MATLAB分别给出了针对插值基 点为网格节点的插值函数及针对插值基点为散乱节点的 插值函数调用格式。 1、 用MATLAB作网格节点数据的插值
已知m n个节点:(xi ,yj ,zij ),(i=1,2, m; j 1, 2,, n)