1、数学建模中常用的数学软件数学建模中常用的数学软件许许 淳淳延安大学计算机学院数学建模常用数学软件:1、Matlab2、Lindo/Lingo2022-7-2732022-7-274 MATLAB(MATrix LABorotory,矩阵实验室)语言是一种广泛应用于工程计算及数值分析领域的新型高级语言,于1984年由美国 MathWorks 推出,现已成为国际公认的最优秀的工程应用开发环境。MATLAB功能强大、简单易学、编程效率高,深受广大科技工作者的欢迎。2022-7-275 在欧美各高等院校,MATLAB已经成为线性代数、自动控制理论、数字信号处理、时间序列分析、动态系统仿真、图像处理等课
2、程的基本教学工具,成为大学生、硕士生大学生、硕士生以及博士生以及博士生必须掌握的基本技能。1、MATLAB 能干什么?数学计算、算法开发、数据采集建模、仿真、原型 数据分析、开发和可视化科学和工程图形应用程序的开发,包括图形用户界面的创建。2、MATLAB广泛应用于:数值计算、图形处理、符号运算、数学建模、系统辨识、小波分析、实时控制、动态仿真等领域。2022-7-2762022-7-277工作区窗口命令历史窗口命令窗口工具栏菜单栏 Matlab的运行方式包括交互式的命令行方式和M文件的程序方式。例:在命令窗口输入命令:a=1,1.5,2,9,7;0,3.6,0.5,-4,4;7,10,-3,
3、22,33;3,7,8.5,21,6;3,8,0,90,-20将显示一个5*5矩阵。M文件方式,可分为命令M文件和函数M文件。2022-7-278 矩阵是MATLAB最基本的数据对象,大部分运算或命令都是在矩阵运算的意义下执行的。在MATLAB中,不需对矩阵的维数和类型进行说明,MATLAB会根据用户所输入的内容自动进行配置。2022-7-2792022-7-2710 建立矩阵 建立矩阵可以用:直接输入法、利用函数建立矩阵和利用M文件建立矩阵。1)直接输入法:将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。(也可以用回车键代
4、替分号)例如,键入命令:A=1 2 3;4 5 6;7 8 9 输出结果是:A=1 2 3 4 5 6 7 8 92022-7-2711MATLAB提供了许多生成和操作矩阵的函数,可以利用它们去建立矩阵。例如:reshape函数和diag函数等。reshape函数用于建立数值矩阵。diag函数用于产生对角阵。对于比较大且比较复杂的矩阵,可以为它专门建立一个M文件。其步骤为:第一步:使用编辑程序输入文件内容。第二步:把输入的内容以纯文本方式存盘(设文件名为mymatrix.m)。第三步:在MATLAB命令窗口中输入mymatrix,就会自动建立一个名为AM的矩阵,可供以后显示和调用。2022-7
5、-2712冒号表达式在MATLAB中,冒号是一个重要的运算符。利用它可以产生向量,还可用来拆分矩阵。冒号表达式的一般格式是:e1:e2:e3其中e1为初始值,e2为步长,e3为终止值。冒号表达式可产生一个由e1开始到e3结束,以步长e2自增的行向量。2022-7-2713 3建立矩阵的函数 常用函数有:eye(size(A)产生与A矩阵同阶的单位矩阵 zeros(m,n)产生0矩阵 ones(m,n)产生幺矩阵 rand(m,n)产生随机元素的矩阵 size(a)返回包含两个元素的向量。length(a)返回向量的最大者。1、M文件 用MATLAB语言编写的程序,称为M文件。M文件有两类:命令
6、文件和函数文件。命令文件:没有输入参数,也不返回输出参数。函数文件:可以输入参数,也可返回输出参数。建立新的建立新的M文件:文件:从MATLAB命令窗口的File菜单中选择New菜单项,再选择M-file命令。编辑已有的编辑已有的M文件:文件:从MATLAB命令窗口的Flie菜单中选择Open M-file命令。2022-7-27142022-7-2715将需要运行的命令编辑到一个命令文件中,然后在MATLAB命令窗口输入该命令文件的名字,就会顺序执行命令文件中的命令。【例1】建立一个命令文件将变量a,b的值互换。e31m文件:a=1:9;b=11,12,13;14,15,16;17,18,1
7、9;c=a;a=b;b=c;a b 在MATLAB的命令窗口中输入e31,将会执行该命令文件。2022-7-2716 每一个函数文件都定义一个函数。事实上,MATLAB提供的标准函数大部分都是由函数文件定义的。函数文件由function语句引导,其格式为:function 输出形参表=函数名(输入形参表)注释说明部分 函数体注:其中函数名的命名规则与变量名相同。输入形参为函数的输入参数,输出形参为函数的输出参数。当输出形参多于1个时,则应该用方括号括起来。2022-7-2717函数文件编制好后,就可调用函数进行计算。函数调用的一般格式是:输出实参表=函数名(输入实参表)2022-7-2718函
8、数文件tran.m:function gama,theta=tran(x,y)gama=sqrt(x*x+y*y);theta=atan(y/x);调用tran.m的命令文件main1.m:x=input(Please input x=:);y=input(Please input y=:);gam,the=tran(x,y);gam the)arctan(22xyyx幅角:矢径:已知转换公式为:方程(组)求解 导数和微分 数值积分 线性优化和非线性优化 曲线拟合与插值2022-7-2719例1:求解以x3-4x+5=0.命令如下:f=(x)x.3-4*x+5;%匿名函数z=fzero(f,1
9、)例2:求多项式方程x3-8x2+6x-30=0的解.p=1,-8,6,-30;r=roots(p)运行结果:r=7.7260 0.1370+1.9658i 0.1370-1.9658i2022-7-27202022-7-2721例3:求下列三阶线性代数方程组的近似解。5426255452321321321xxxxxxxxxMATLAB程序为:A=2-5 4;1 5-2;-1 2 4;b=5;6;5;x=Ab2022-7-2722 在MATLAB命令窗口,先输入下列命令构造系数矩阵A和右端向量b:A=2-5 4;1 5-2;-1 2 4A=2-5 4;1 5-2;-1 2 4A=2 -5 4
10、1 5 -2 -1 2 4b=5;6;5b=5;6;5b=5 6 5然后只需输入命令x=Ab即可求得解x:x=Abx=Abx=2.7674 1.1860 1.3488例4:求向量sin(X)的13阶差分。设X由0,2间均匀分布的10个点组成。命令如下:X=linspace(0,2*pi,10);Y=sin(X);DY=diff(Y);%计算Y的一阶差分D2Y=diff(Y,2);%计算Y的二阶差分,也可用命令diff(DY)计算D3Y=diff(Y,3);%计算Y的三阶差分,也可用diff(D2Y)或diff(DY,2)2022-7-27232022-7-2724例5:求无穷定积分dxex2/
11、221 y,kk=quad(f,-8,8)y=1.00000197533430kk=81 y1,kk1=quad8(f,-8,8)y1=1.00000000000023kk1=161 y,kk=quad(f,-15,15)y=0.99999920879563kk=89 y1,kk1=quad8(f,-15,15)y1=0.99999999999999kk1=769该无穷定积分的理论值为该无穷定积分的理论值为 1 f=inline(1/sqrt(2*pi)*exp(-x.2/2),x);例6:求下面的优化问题min -5*x1-4*x2-6*x3sub.to x1-x2+x3=20 3*x1+2
12、*x2+4*x3=42 3*x1+2*x2=30 0=x1;0=x2;0=x3;2022-7-2725f=-5;-4;-6;A=1-1 1;3 2 4;3 2 0;b=20;42;30;lb=zeros(3,1);x,fval,exitflag,output,lambda=linprog(f,A,b,lb)2022-7-27262022-7-272701005.10.)12424()(2121212122122211xxxxxxxxt sxxxxxexfx例7:2022-7-2728例8:用一个5次多项式在区间0,2内逼近函数sin(x)。命令如下:X=linspace(0,2*pi,50);
13、Y=sin(X);P,S=polyfit(X,Y,5)%得到5次多项式的系数和误差plot(X,Y,k*,X,polyval(P,X),k-)例9:已知检测参数f随时间t的采样结果,用数值插值法计算t=2,7,12,17,22,17,32,37,42,47,52,57时f的值。命令如下:T=0:5:65;X=2:5:57;F=3.2019,2.2560,879.5,1835.9,2968.8,4136.2,5237.9,6152.7,.6725.3,6848.3,6403.5,6824.7,7328.5,7857.6;F1=interp1(T,F,X)%用线性方法插值F1=interp1(T,
14、F,X,nearest)%用最近方法插值F1=interp1(T,F,X,spline)%用三次样条方法插值F1=interp1(T,F,X,cubic)%用三次多项式方法插值 所谓符号计算是指在运算时,无须事先对变量赋值,而将所得到结果以标准的符号形式来表示。MathWorks公司以Maple的内核作为符号计算引擎(Engine),依赖Maple已有的函数库,开发了实现符号计算的两个工具箱:基本符号工具箱和扩展符号工具箱。常见符号计算:解方程、微积分、简化方程表达式等。2022-7-27322022-7-2733 求极限 函数limit用于求符号函数f的极限。系统可以根据用户要求,计算变量从
15、不同方向趋近于指定值的极限值。该函数的格式及功能:2022-7-2734 limit(f,x,a):求符号函数f(x)的极限值。即计算当变量x趋近于常数a时,f(x)函数的极限值。limit(f,a):求符号函数f(x)的极限值。由于没有指定符号函数f(x)的自变量,则使用该格式时,符号函数f(x)的变量为函数findsym(f)确定的默认自变量,既变量x趋近于a。limit(f):求符号函数f(x)的极限值。符号函数f(x)的变量为函数findsym(f)确定的默认变量;没有指定变量的目标值时,系统默认变量趋近于0,即a=0的情况。limit(f,x,a,right):求符号函数f的极限值。
16、right表示变量x从右边趋近于a。limit(f,x,a,left):求符号函数f的极限值。left表示变量x从左边趋近于a。2022-7-2735【例1】求极限 syms x;%定义符号变量f=(x*(exp(sin(x)+1)-2*(exp(tan(x)-1)/sin(x)3;%确定符号表达式 w=limit(f)%求函数的极限 运行结果:w=-1/2xeextgxxx3sin0sin)1(2)1(lim2022-7-2736【例2】求导数:x=sym(x);%定义符号变量 diff(sin(x2)%求导运算 运行结果:ans=2*cos(x2)*xdxxd2sin2022-7-2737
17、【例3】求下述积分。求积分:syms x int(1/(1+x2)ans=atan(x)dxx2112022-7-2738【例 4】求 级 数 的 和:键 入:1/12+1/22+1/32+1/42+syms k symsum(1/k2,1,Inf)%k值为1到无穷大 ans=1/6*pi2 其结果为:1/12+1/22+1/32+1/42+=2/62022-7-2739【例5】将表达式(x9-1)分解为多个因式。syms x factor(x9-1)ans=(x-1)*(x2+x+1)*(x6+x3+1)2022-7-2740 代数方程的求解 求解代数方程组 微分方程的求解 微分方程组的求解
18、 复合方程 反方程 3、解方程2022-7-2741【例6】解代数方程:a*x2-b*x-6=0 syms a b x solve(a*x2-b*x-6)ans=1/2/a*(b+(b2+24*a)(1/2)1/2/a*(b-(b2+24*a)(1/2)即该方程有两个根:x1=1/2/a*(b+(b2+24*a)(1/2);x2=1/2/a*(b-(b2+24*a)(1/2)2022-7-2742【例7】作符号计算:a,b,x,y均为符号运算量。在符号运算前,应先将a,b,x,y定义为符号运算量15byaxbyax2022-7-2743 a=sym(a);%定义a为符号运算量,输出变量名为a b=sym(b);x=sym(x);y=sym(y);x,y=solve(a*x-b*y-1,a*x+b*y-5,x,y)%以a,b为符号常数,x,y为符号变量 即可得到方程组的解:x=3/a y=2/b2022-7-2744作为一个功能强大的工具软件,Matlab具有很强的图形处理功能,提供了大量的二维、三维图形函数。由于系统采用面向对象的技术和丰富的矩阵运算,所以在图形处理方面即常方便又高效。七、绘图功能2022-7-27453.1 二维图形2022-7-27463.1 三维图形2022-7-2747