第1讲MATLAB及在数学建模中的应用• MatLab简介及基本运算•常用计算方法•应用实例一、 MatLab简介及基本运算1.1 MatLab简介1.2 MatLab界面1.3 MatLab基本数学运算1.4 MatLab绘图1.1 MatLab简介•MATLAB名字由MATrix和 LABoratory 两词组成。
20世纪七十年代后期, 美国新墨西哥大学计算机科学系主任Cleve Moler教授为减轻学生编程负担,为学生设计了一组调用LINPACK和EISPACK库程序的“通俗易用”的接口,此即用FORTRAN编写的萌芽状态的MATLAB。
•经几年的校际流传,在Little的推动下,由Little、Moler、Steve Bangert合作,于1984年成立了MathWorks公司,并把MATLAB正式推向市场。
从这时起,MATLAB的内核采用C语言编写,而且除原有的数值计算能力外,还新增了数据图视功能。
•1997年春,MATLAB5.0版问世,紧接着是5.1、5.2、5.3、6.0、6.1、6.5、7.0版。
现今的MATLAB拥有更丰富的数据类型和结构、更友善的面向对象、更加快速精良的图形可视、更广博的数学和数据分析资源、更多的应用开发工具。
•20世纪九十年代的时候,MATLAB已经成为国际控制界公认的标准计算软件。
•MATLAB具有用法简易、可灵活运用、程式结构强又兼具延展性。
以下为其几个特色:①可靠的数值运算和符号计算。
在MATLAB环境中,有超过500种数学、统计、科学及工程方面的函数可使用。
②强大的绘图功能。
MATLAB可以绘制各种图形,包括二维和三维图形。
③简单易学的语言体系。
④为数众多的应用工具箱。
1.2MatLab界面1.3 MatLab基本数学运算•MATLAB的基本算术运算有:+(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘方) 还有一种特殊的运算,点运算:.*、./、.\和.^。
•输入方式:在MATLAB命令窗中输入>> (12+2*(7-4))/3^2>> z=2*exp(2)+sin(pi/6)>> B=[1+5i,2+6i;3+8*i,4+9*i]在M文件中输入例1.1 求方程 3x4+7x3 +9x2-23=0的全部根p=[3,7,9,0,-23]; %建立多项式系数向量x=roots(p) %求根例1.2 求一元二次方程ax2 +bx+c=0的根。
a=input('a=');b=input('b=');c=input('c=');d=b*b-4*a*c;x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);•变量命名规则:1. 变量名区分大小写。
2. 变量的第一个字符必须为英文字母。
3. 变量名可以包含下连字符、数字,但不能为空格符、标点。
1.4 MatLab绘图二维数据曲线图例1.3 绘制曲线 x=tsin(3t),y=tsin2(t), 0≤t≤2π 。
t=0:0.1:2*pi;x=t.*sin(3*t);y=t.*sin(t).*sin(t);plot(x,y);其他二维图形极坐标图polar(theta,rho,选项)条形图bar(x,y,选项)阶梯图stairs(x,y,选项)杆图stem(x,y,选项)填充图fill(x1,y1,选项1,x2,y2,选项2,…)饼图pie(x)三维图形三维曲线plot3(x1,y1,z1,选项1,…,xn,yn,zn,选项n)三维曲面利用meshgrid函数产生平面区域内的网格坐标矩阵。
其格式为:x=a:d1:b; y=c:d2:d;[X,Y]=meshgrid(x,y);mesh(x,y,z)和surf(x,y,z)是绘制三维曲面的函数。
x,y是网格坐标矩阵,z是网格点上的高度矩阵。
例1.4 绘制三维曲面图z=sin(x+sin(y))-x/10。
[x,y]=meshgrid(0:0.25:4*pi); z=sin(x+sin(y))-x/10;mesh(x,y,z); %surf(x,y,z);5101551015-3-2-115101551015-3-2-101二、常用计算方法•线性方程组Ax=b求解•非线性方程组数值求解•无约束最优化问题求解•有约束最优化问题求解•常微分方程初值问题的数值解法•插值与拟合•数值积分与数值微分㈠、线性方程组Ax =b 求解 (1) x=A\b (2) x=inv(A)*b例2.1 用直接解法求解下列线性方程组:⎪⎪⎩⎪⎪⎨⎧=--+=-+-=+-=+-+04662975135243214324214321x x x x x x x x x x x x x x㈡、非线性方程组数值求解(1) fzero函数求单变量非线性方程的根。
调用格式为:z=fzero('fname',x0,tol,trace)(2) fsolve函数非线性方程组F(X)=0,用fsolve函数求其数值解。
fsolve函数的调用格式为:X=fsolve('fun',X0,option)例2.2 求下列非线性方程组在(0.5,0.5) 附近的数值解。
分两步:1、建立函数文件myfun.m ;2、在给定的初值 x0=0.5,y0=0.5 下,调用fsolve 函数求方程的根。
⎩⎨⎧=+-=--0sin 3.0cos 6.00cos 3.0sin 6.0y x y y x x函数文件myfun.m:function q=myfun(p)x=p(1);y=p(2);q(1)=x-0.6*sin(x)-0.3*cos(y);q(2)=y-0.6*cos(x)+0.3*sin(y);调用:z=fsolve('myfun',[0.5,0.5],optimset('Display',' off'))结果:z =0.63540.3734将求得的解代回原方程,可以检验结果是否正确,命令如下:q=myfun(z)q =1.0e-009 *0.2375 0.2957可见得到了较高精度的结果。
㈢、无约束最优化问题求解MATLAB提供了3个最小值函数,它们的调用格式为:[x,fval]=fminbnd('fname',x1,x2,option)求一元函数在区间(x1,x2)中的最小值点x 和最小值fval. 求多元函数:x=fminsearch('fname',x0,option)x=fminunc('fname',x0,option) 这两个函数的调用格式相似。
其中fminsearch函数是基于单纯形算法,fminunc是基于拟牛顿法求多元函数的最小值点,x0是求解的初始值向量。
㈣、有约束最优化问题求解有约束最优化问题的一般描述为约束条件可进一步细化为:•线性不等式约束:Ax ≤b•线性等式约束: Aeqx =beq•非线性不等式约束:C(x) ≤0•非线性等式约束: Ceq(x) =0•x 的下界和上界: Lbnd ≤x ≤Ubnd)(min 0≤)(..x f x G t xsMATLAB提供了fmincon函数,专门用于求解各种约束下的最优化问题。
它的调用格式为:[x,fval]=fmincon(‘fname’,x0,A,b,Aeq,beq, Lbnd,Ubnd,NonF,option)其中A,b,Aeq,beq,Lbnd,Ubnd为约束条件,参数NonF为非线性约束函数的M文件名。
如果某个约束不存在,则用空矩阵来表示。
例2.3 资金使用问题设有400万元资金, 要求4年内使用完, 若在一年内使用资金x 万元, 则可得效益 万元(效益不能再使用), 当年不用的资金可存入银行, 年利率为10%. 试制定出资金的使用计划, 以使4年效益之和为最大. 分析:设变量表示第i 年所使用的资金数,则有x 4,3,2,1,04.5321.121.1331.14841.121.14401.1400..max 43213212114321=≥≤+++≤++≤+≤+++=i x x x x x x x x x x x t s x x x x z i分3步求解:1.先建立M文件 fun44.m,定义目标函数; function f=fun44(x)f=-(sqrt(x(1))+sqrt(x(2))+sqrt(x(3))+sqrt(x(4)));2. 再建立M文件mycon1.m定义非线性约束; function [g,ceq]=mycon1(x)g(1)=x(1)-400;g(2)=1.1*x(1)+x(2)-440;g(3)=1.21*x(1)+1.1*x(2)+x(3)-484;g(4)=1.331*x(1)+1.21*x(2)+1.1*x(3)+x(4)-532.4;ceq=0;3. 主程序eg3.m。
x0=[1;1;1;1];vlb=[0;0;0;0];vub=[];A=[];b=[];Aeq=[]; beq=[];[x,fval]=fmincon('fun44',x0,A,b,Aeq,beq,vlb,vub,' mycon1‘,optimset('Display','off','LargeScale','off'));disp(['四年使用的资金数为:',num2str(x')]);disp(['最大效益为:',num2str(fval)]);结果:四年使用的资金数为:84.24441 107.6353 128.9029 148.2387最大效益为:43.0821MATLAB求解优化问题的主要函数:类型模型基本函数名一元函数极小Min F(x)s.t.x1<x<x2 x=fminbnd(‘F’,x1,x2)无约束极小Min F(X)X=fminunc(‘F’,X0) X=fminsearch(‘F’,X0)线性规划Min Xc Ts.t.AX<=bX=linprog(c,A,b)二次规划Min21x T Hx+c T xs.t. Ax<=bX=quadprog(H,c,A,b)约束极小(非线性规划)Min F(X)s.t. G(X)<=0X=fmincon(‘FG’,X0)达到目标问题Min rs.t. F(x)-wr<=goalX=fgoalattain(‘F’,x,goal,w)极小极大问题Min max {F i(x)}X {Fi(x)}s.t. G(x)<=0X=fminimax(‘FG’,x0)㈤、常微分方程初值问题的数值解法基于龙格-库塔法,MATLAB 提供了求常微分方程数值解的函数,一般调用格式为:[t,y]=ode23('fname',tspan,y0)[t,y]=ode45('fname',tspan,y0)000)(,≤≤),,(y t y T t t y t f y ==′例2.4 设有初值问题求其数值解,并与精确解比较。