logo资料库

数学建模备考方法(司守奎).pdf

第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
资料共19页,剩余部分请下载后查看
数学中国(www.madio.net)—— 专业的数学建模论坛! 数学建模讲座——计算软件的使用 司守奎,海军航空工程学院数学教研室 Email:sishoukui@163.com,QQ:94339146 一般来说学习数学建模,常用的软件有五种,分别是 Matlab、Lingo、Mathematica、SPSS 和 SAS。实际上使用什么软件都可以,关键是在论文中把数学原理写清楚。如果你搞清了 算法,你也可以自己编程从底层一步一步地实现算法。当然如果我们借助于 Matlab 的强大 工具箱,可以起到事半功倍的作用。 数学建模涉及的知识和算法特别多,我认为至少要掌握数学规划,图论,预测方法,评 价方法这四大部分知识,其它的数学知识和算法可能就需要数学建模竞赛时现学现卖了。这 些知识我就不展开讲了,相关的数学建模书上都有这些内容。我新版的数学建模教材《数学 建模算法及应用》(国防工业出版社出版),第 14 章把评价方法总结了一下,第 15 章把预测 方法也总结了一下。新版的数学建模教材相对于网上流传的算法大全的电子文档,对一些内 容进行了压缩,增加了数字图像处理的知识,并增加了一些 Matlab 工具箱的应用。 对于数学规划的模型,建议大家使用 Lingo 软件求解比较方便,对于其它问题,如时间 序列模型,你使用什么软件求解都可以,关键看个人的喜好和对某种软件的熟悉程度,例如 你可以使用 SPSS,SAS 或 Eviews,R 软件等求解时间序列模型。我对 Matlab 软件比较熟悉, 一般问题我都是使用 Matlab 软件进行求解。 由于时间的关系,我主要讲一下 Matlab 软件的使用。 1 画图 建议大家要善于使用 ezplot,ezsurf,ezmesh 等命令。 例 1 画出 绕 x轴旋转一周所形成的旋转曲面。 + y − 16 2 x )5 ( 2 = 解 因为这里的函数是隐函数,化成显函数后有两支,必须使用参数方程,旋转面的参 数方程为 其中 , ) β β 。画图的 Matlab 程序如下。 αcos , sin45( + α cos sin45( + α sin) ]2,0[ π 4=x =y =z βα ∈ alpha=[0:0.1:2*pi]'; beta=0:0.1:2*pi; x=4*cos(alpha)*ones(size(beta)); y=(5+4*sin(alpha))*cos(beta); z=(5+4*sin(alpha))*sin(beta); surf(x,y,z) 画图的 Matlab 程序也可以写成 x=@(alpha,beta) 4*cos(alpha); y=@(alpha,beta) (5+4*sin(alpha))*cos(beta); z=@(alpha,beta) (5+4*sin(alpha))*sin(beta); ezsurf(x,y,z) 2011 年数学中国公益讲座——数学建模之软件实现(司守奎)
数学中国(www.madio.net)—— 专业的数学建模论坛! 对于其它的二次曲面,如果可以写成单支的显函数,直接使用命令 ezmesh 或 ezsurf 画 图 1 例 1 的图形 图,否则必须先化成参数方程。 例 2 绘制二元函数 z = sin( xy ) xy 的三维表面图。 程序一 [x,y]=meshgrid([-3:0.2:3]); z=(sin(x.*y)+eps)./(x.*y+eps); surf(x,y,z) %使用 surf 画图,要求 x,y,z 是同维数的矩阵 程序二 ezsurf('sin(x*y)/(x*y)') %使用符号函数画图 程序三 z=@(x,y) sin(x*y+eps)/(x*y+eps); %定义匿名函数 ezsurf(z) %使用匿名函数画图 1 0.5 0 -0.5 4 2 0 -2 0 -2 -4 -4 4 2 图 2 例 2 的图形 = 1 的图形。 例 3 绘出椭圆柱面 2 2 yx 4 9 解 椭圆柱面的参数方程为 + 2011 年数学中国公益讲座——数学建模之软件实现(司守奎)
数学中国(www.madio.net)—— 专业的数学建模论坛! x , cos 3 α = ⎧ ⎪ y , sin2 α = ⎨ ⎪ Rttz . , ∈= ⎩ 编写的 Matlab 程序如下 x=@(alpha,t) 3*cos(alpha); %定义参数方程的匿名函数 y=@(alpha,t) 2*sin(alpha); z=@(alpha,t) t; ezmesh(x,y,z) x = 3 cos(α), y = 2 sin(α), z = t 10 5 0 -5 -10 2 z 1 0 y -1 -2 -4 -2 0 x 图 3 例 3 的图形 4 2 在 Matlab 的图形中利用 Interpreter 的属性值为 latex,可以使用数学公式。 例4 画出 y= sin(x ) , y = sin( πx + 3 2) + , y= cos(x ) 的对比图。 解 画图的Matlab程序如下 clc, clear x=-2*pi:0.1:2*pi; y1=sin(x); y2=sin(x+pi/3)+2; y3=cos(x); plot(x,y1,'.-'); hold on %图形保持命令 plot(x,y2,'*-'); plot(x,y3,'-o'); h=legend('sin($x$)','sin($x+\frac{\pi}{3}$)','cos($x$)') %latex格式显示 set(h,'Interpreter','latex') xlabel('$x$','Interpreter','latex') %latex格式显示 ylabel('$y$','Interpreter','latex') %latex格式显示 2011 年数学中国公益讲座——数学建模之软件实现(司守奎)
数学中国(www.madio.net)—— 专业的数学建模论坛! 图 4 例 4 的图形 2.积分 Matlab 求符号积分的命令为 int,求一重数值积分的命令为 quad,quadl,求二重数值 积分的命令为 dblquad,求三重数值积分的命令为 triplequad。 1 2 1 x 3 + x 2 + 0 dx 的数值积分。 例 5 求∫ f=@(x) (2*x+3)./(1+x.^2);%注意这里函数适用范围要广,对于向量也可逐点计算取值 I=quadl(f,0,1) 例 6 计算二重积分 dxdy ) yx 2 2 4( − − ∫∫ ≤ 4 。 D 2 + yxD : 2 其中 f=@(x,y)(4-x.^2-y.^2).*(x.^2+y.^2<=4);%定义被积函数和积分区域合成后的匿名函数 I=dblquad(f,-2,2,-2,2) %求二重积分的数值解 例 7 计算 I ∫∫∫ = Ω 成的区域。 ( zyx 2) ++ dxdydz ,其中 Ω 为 2 yxz 2 + ≥ 与 2 2 zyx + + 2 ≤ 2 所围 f=@(x,y,z) (x+y+z).^2.*(z>=x.^2+y.^2 & x.^2+y.^2+z.^2<=2); I=triplequad(f,-sqrt(2),sqrt(2),-sqrt(2),sqrt(2),0,sqrt(2)) 3 拟合 拟合的准则多数情形下使用的是最小二乘法,即误差平方和最小;一些经济学问题上 的拟合使用最小一乘法,即误差绝对值和最小。 3.1 线性最小二乘法 无论 bAx= ,Matlab 的求解命令为 Matlab 中的线性最小二乘法实际上是解线性方程组,对应的 Matlab 命令是斜杠“\”。 对于非齐次线性方程组 x=A\b bAx= 有唯一解,无穷多解还是无解时,Matlab 总是给出一个解。 (1)当 (2)当 (3)当 bAx= 唯一解时,Matlab 给出的就是该唯一解。 bAx= 有无穷多解时,Matlab 给出的是最小范数解。 bAx= 无解时,Matlab 给出的是最小二乘解。 2011 年数学中国公益讲座——数学建模之软件实现(司守奎)
数学中国(www.madio.net)—— 专业的数学建模论坛! 例 8 利用表 1 的数据拟合函数 xaxaay 22 11 + + = 0 中的参数 , aaa 0 2 , 1 。 1x 5 5 7 8 8 3 7 7 2 表 1 2x 2 5 10 4 6 3 8 3 6 y 1.5 2.3 3.5 5.2 1.8 2.9 3.8 4.5 4.7 1.5 5 10 4 6 3 8 3 6 2 2.3 3.5 5.2 1.8 2.9 3.8 4.5 4.7]; 拟合参数的 Matlab 程序为 a=[5 5 7 8 8 3 7 7 2 m=size(a,1); %求矩阵 a 的行数 xishu=[ones(m,1),a(:,[1,2])]; %构造待定参数作为未知数的线性方程组的系数阵 cs=xishu\a(:,3) %拟合参数 .0 9051 0763 009 求得 .2 .0 , , 。 0 =a 2 =a 1 =a 例 9 利用表 1 的数据拟合函数 xaxa eeay= 11 22 0 中的参数 , aaa , 。 2 0 xaxa eeay= 解 把函数 11 22 1 0 两边取对数得 ln y = ln xaxaa 0 2 11 + + 2 ,拟合的 Matlab 程 序如下 1.5 clc, clear a=[5 5 7 8 8 3 7 5 10 4 6 3 8 2 2.3 3.5 5.2 1.8 2.9 3.8 2011 年数学中国公益讲座——数学建模之软件实现(司守奎)
数学中国(www.madio.net)—— 专业的数学建模论坛! 3 6 4.5 4.7]; 7 2 m=size(a,1); xishu=[ones(m,1),a(:,[1,2])]; %构造线性方程组的系数阵 b=log(a(:,3)); %计算线性方程组的常数项列 cs=xishu\b; %拟合 log(y)中的未知参数 cs(1)=exp(cs(1)) %求函数 y 中的参数 1 −=a .0 计算的结果为 6012 0072 2 =a 0 =a .2 , , .00 415 。 3.2 用户图形界面解法 Matlab 中拟合一元函数可以使用用户图形界面解法命令 cftool,拟合二元函数可以使 用命令 sftool。 例 10(续例 9) 用用户图形界面命令 sftool 拟合 中的参数 , aaa 0 2 , 1 。 xaxa eeay= 11 22 0 操作的步骤如下 (1)首先把数据加载到 Matlab 工作空间中; 运行如下程序 clc, clear a=[5 5 5 7 8 8 3 7 7 2 10 4 6 3 8 3 6 1.5 2 2.3 3.5 5.2 1.8 2.9 3.8 4.5 4.7]; x1=a(:,1); x2=a(:,2); z=a(:,3); (2)在 Matlab 命令窗口运行 sftool,得到如下界面 图 5 初始界面 (3)输入自变量 X,Y 的数据 x1,x2,因变量 Z 的数据 z,并定义要拟合的函数 a0*exp(a1*x)*exp(a2*y) 设置完成以后的界面如下 2011 年数学中国公益讲座——数学建模之软件实现(司守奎)
数学中国(www.madio.net)—— 专业的数学建模论坛! 图 6 参数设置好以后的界面 (4)用鼠标点一下界面上“fit”按钮,就得到拟合结果。 图 7 拟合结果界面 (5)使用菜单“fit”中的子菜单“Save to Workspace…”,也可以把计算结果输出到 Matlab 工作空间中。 3.3 非线性拟合 Matlab 中非线性拟合的命令有 lsqcurvefit 和 nlinfit,用户图形界面命令 nlintool。 下面通过一个例子说明 lsqcurvefit 的使用。 例 11 利用表 2 给出的近两个世纪的美国人口统计数据(以百万为单位),建立人口预 测模型,最后用它预报 2010 年美国的人口。 年 人口 年 人口 年 人口 表 2 美国人口统计数据 1790 3.9 1870 38.6 1950 150.7 1800 5.3 1880 50.2 1960 179.3 1810 7.2 1890 62.9 1970 204.0 1820 9.6 1900 76.0 1980 226.5 1830 12.9 1910 92.0 1990 251.4 1840 17.1 1920 106.5 2000 281.4 1850 23.2 1930 123.2 1860 31.4 1940 131.7 1. 建模与求解 2011 年数学中国公益讲座——数学建模之软件实现(司守奎)
数学中国(www.madio.net)—— 专业的数学建模论坛! 记 )(tx 为第t年的人口数量,设人口年增长率 )(xr 为 x的线性函数, sxrxr −=)( 。自 然资源与环境条件所能容纳的最大人口数为 mx ,即当 mxx= 时,增长率 =mxr ( ) 0 ,可得 rxr )( 1( = − x mx ) ,建立 Logistic 人口模型 = r 1( − x x m x ,) dx ⎧ ⎪ dt ⎨ ⎪ tx ( ⎩ 0 x ) 0 = , 其解为 tx )( = (1 + x m x 0 x m )1 − e − . ttr ( − 0 ) (1) 2. 参数估计 把表 2 中的全部数据,包括后面的四个空格,全部保存到纯文本文件 data2.txt 中。 (1)非线性最小二乘估计 把表 2 中的第 1 个数据作为初始条件,利用余下的数据拟合式(1)中的参数 mx 和 r, 编写的 Matlab 程序如下 clc, clear a=textread('data2.txt'); %把原始数据保存在纯文本文件 data2.txt 中 x=a([2:2:6],:)'; %提出人口数据 x=nonzeros(x); %去掉后面的零,并变成列向量 t=[1790:10:2000]'; t0=t(1); x0=x(1); fun=@(cs,td)cs(1)./(1+(cs(1)/x0-1)*exp(-cs(2)*(td-t0))); %cs(1)=xm,cs(2)=r %注意上面定义的要拟合的匿名函数,自变量要具有广泛使用性, %对向量也可以逐点计算函数值,否则调用 lsqcurvefit 时出错。 cs=lsqcurvefit(fun,rand(2,1),t(2:end),x(2:end),zeros(2,1)) %非线性问题有时很难求得全局最优解,如果拟合参数不稳定, %要限制参数向量的下界和上界,计算结果就稳定了。 xhat=fun(cs,t) %预测已知年代人口 x2010=fun(cs,2010) %预测 2010 年的人口 求得 =mx 342 . 4368 , .0=r 0274 ,2010 年人口的预测值为 282.68 百万。 (2)线性最小二乘法 为了利用简单的线性最小二乘法估计这个模型的参数r和 mx ,把 Logistic 方程表示为 1 x ⋅ dx dt −= sxr , rs= , mx (2) 2011 年数学中国公益讲座——数学建模之软件实现(司守奎)
分享到:
收藏