您好,欢迎访问三七文档
当前位置:首页 > 高等教育 > 理学 > 数学建模MATLAB程序设计专题
2020/6/21MATLAB_程序设计1MATLAB程序设计专题M文件有两种形式M脚本文件M函数文件2020/6/21MATLAB_程序设计2M脚本文件的特点1、脚本文件中的命令格式和前后位置与在命令窗口中输入相同。2、运行脚本文件时,只是按顺序从文件中读取一条条命令,送到MATLAB命令窗口中去执行。2020/6/21MATLAB_程序设计3M脚本文件的特点3、与在命令窗口中直接运行命令一样,脚本文件运行产生的变量都是驻留在MATLAB的工作空间(workspace)中,可以很方便地查看变量;脚本文件的命令也可以访问工作空间的所有数据,因此要注意避免变量的覆盖而造成程序出错。2020/6/21MATLAB_程序设计4M函数文件的基本格式函数声明行function[输出变量列表]=函数名(输入变量列表)H1行(用%开头的注释行)在线帮助文本(用%开头)编写和修改记录(用%开头)函数体2020/6/21MATLAB_程序设计5创建M函数文件并调用的步骤编写函数代码将函数文件保存为“函数名.m”。在命令窗口输入命令调用程序2020/6/21MATLAB_程序设计6M函数文件的特点1、第一行总是以“function”引导的函数声明行;2、函数文件在运行过程中产生的变量都存放在函数本身的工作空间;3、当文件执行完最后一条命令或遇到“return”命令时,就结束函数文件的运行,同时函数工作空间的变量就被清除;2020/6/21MATLAB_程序设计7M函数文件的特点4、函数的工作空间随具体的M函数文件调用而产生,随调用结束而删除,是独立的、临时的,在MATLAB运行过程中可以产生任意多个临时的函数空间。5、文件名与函数名相同。2020/6/21MATLAB_程序设计8程序流程控制三种控制结构•顺序•循环•分支2020/6/21MATLAB_程序设计9循环结构1、for...end循环结构for循环变量=array循环体end说明:循环体执行的次数就是array的列数。循环变量依次取array的各列,每取一次循环体执行一次。2020/6/21MATLAB_程序设计10循环结构2、while...end循环结构while表达式循环体end说明:只要表达式为逻辑真,就执行循环体;一旦表达式为假,就结束循环。2020/6/21MATLAB_程序设计11分支结构1、if…else…end条件转移结构if条件式1语句段1elseif条件式2语句段2...else语句段n+1end2020/6/21MATLAB_程序设计12if分支结构例子--+=)()6030()30(151050)3015(50)150(101540其他NaNxxxxxy2020/6/21MATLAB_程序设计13functiony=Ex01(x)%Ex01根据x值求yifx0y=NaNelseifx15y=40/15*x+10elseifx30y=50elseifx=60y=50-10/15*(x-30)elsey=NaNend2020/6/21MATLAB_程序设计14学生成绩判定(ifelsef.m)functionifelsef()%ifelsef使用if结构的成绩评定grade=input('inputthegrade:')if(grade=0)&(grade60)rank='不及格';elseif(grade=60)&(grade70)rank='及格';elseif(grade=70)&(grade85)rank='良好';elseif(grade=85)&(grade=100)rank='优秀';elserank='成绩错误!';endrank2020/6/21MATLAB_程序设计15分支结构2、switch…case开关结构switch开关表达式case表达式1语句段1case表达式2语句段2...otherwise语句段nend2020/6/21MATLAB_程序设计16分支结构2、switch…case开关结构说明:(1)开关表达式只能是标量或字符串。(2)case后面的表达式可以是标量、字符串或元胞数组,如果是元胞数组则将开关表达式与元胞数组的所有元素进行比较,只要某个元素与开关表达式相等,就执行其后的语句段。2020/6/21MATLAB_程序设计17switch分支结构例子季节判断(swtichf.m)2020/6/21MATLAB_程序设计18分支结构3、try...catch...end试探结构try语句段1catch语句段2end2020/6/21MATLAB_程序设计19分支结构3、try...catch...end试探结构说明:首先试探性地执行语句段1,如果在此段语句执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并放弃这段语句,转而执行语句段2中的语句,当执行语句段2又出现错误,则终止该结构。2020/6/21MATLAB_程序设计20流程控制语句1.break命令break命令可以使包含break的最内层的for或while语句强制终止,立即跳出该结构,执行end后面的命令,break命令一般和if结构结合使用。2.continue命令continue命令用于结束本次循环,只结束本次循环而继续进行下次循环。2020/6/21MATLAB_程序设计21流程控制语句3.return命令return命令是终止当前命令的执行,并且立即返回到上一级调用函数或等待键盘输入命令,可以用来提前结束程序的运行。4.pause命令pause命令用来使程序运行暂停,等待用户按任意键继续。2020/6/21MATLAB_程序设计22流程控制语句5.keyboard命令keyboard命令用来使程序暂停运行,等待键盘命令,执行完自己的工作后,输入return语句,程序就继续运行。6.input命令input命令用来提示用户应该从键盘输入数值、字符串和表达式,并接受该输入。2020/6/21MATLAB_程序设计23局部变量和全局变量根据变量的作用域不同,可以将MATLAB程序中的变量分为局部变量和全局变量.2020/6/21MATLAB_程序设计24局部变量局部变量(LocalVariables)是在函数体内部使用的变量,其影响范围只能在本函数内;因为每个函数在运行时,都占用独立的函数工作空间,与MATLAB的工作空间是相互独立的,所以局部变量只在函数执行期间存在。2020/6/21MATLAB_程序设计25全局变量全局变量(GlobalVariables)是可以在不同的函数工作空间和MATALB工作空间中共享使用的变量。用global定义,而且每个要共享全局变量的函数和工作空间,都必须逐个定义,先定义后使用.注意:由于全局变量在任何定义过的函数中都可以修改,因此不提倡使用全局变量;使用时应十分小心,建议把全局变量的定义放在函数体的开始,全局变量用大写字符命名。2020/6/21MATLAB_程序设计26函数的参数函数调用格式:[输出参数1,输出参数2,…]=函数名(输入参数1,输入参数2,…)2020/6/21MATLAB_程序设计27函数参数的个数(1)nargin和nargout变量(sumf.m)•nargin%在函数体内获取实际输入变量的个数•nargout%在函数体内获取实际输出变量的个数2020/6/21MATLAB_程序设计28函数参数的个数(1)nargin和nargout变量•nargin(’fun’)%在函数体外获取定义的输入参数个数•nargout(’fun’)%在函数体外获取定义的输出参数个数2020/6/21MATLAB_程序设计29函数的参数个数(2)varargin和varargout变量varargin和varargout可以获得输入输出变量的各元素内容。varargin和varargout都是元胞数组。调用形式:varargin{m}2020/6/21MATLAB_程序设计30M文件性能优化1.使用循环时提高速度的措施(1)尽量用向量的运算来代替循环操作。(2)在必须使用多重循环的情况下,如果两个循环执行的次数不同,则建议在循环的外环执行循环次数少的,内环执行循环次数多的,也可以显著提高速度。2020/6/21MATLAB_程序设计31M文件性能优化2.大型矩阵的预先定维3.优先考虑内在函数4.采用高效的算法5.尽量使用M函数文件代替M脚本文件2020/6/21MATLAB_程序设计32泛函命令在MATLAB中,所有以函数为输入变量的命令,都称为泛函命令。2020/6/21MATLAB_程序设计33泛函命令调用方式[输出变量列表]=函数名(h_fun,输入变量列表)[输出变量列表]=函数名(‘funname’,输入变量列表)说明:h_fun是要被执行的M函数文件的句柄,或者是内联函数和字符串;‘funname’是M函数文件名。2020/6/21MATLAB_程序设计34利用泛函命令求极小值1.fminbnd函数:用来计算单变量非线性函数的最小值。•[x,y]=fminbnd(h_fun,x1,x2,options)•[x,y]=fminbnd(‘funname’,x1,x2,options)x是fun函数在区间x1xx2上的局部最小值的发生点;y是对应的最小值。options是用来控制算法的参数向量,默认值为0可省略。2020/6/21MATLAB_程序设计35利用泛函命令求极小值2.fminsearch函数:求多变量无约束非线性最小值。•x=fminsearch(h_fun,x0)•x=fminsearch(‘funname’,x0)x0是最小值点的初始猜测值。2020/6/21MATLAB_程序设计36其它泛函命令3.fzero函数:求一维函数的零点,即求f(x)=0的根。•x=fzero(h_fun,x0,tol,trace)•x=fzero(‘funname’,x0,tol,trace)x0有两个作用:预定待搜索零点的大致位置和搜索起始点;tol用来控制结果的相对精度,默认值为eps;trace指定迭代信息是否在运算中显示。2020/6/21MATLAB_程序设计37其它泛函命令4.数值积分:quad和quad8是基于数学上的正方形概念来计算函数的面积。5.微分方程的数值解:MATLAB提供ode23、ode45和ode113等多个函数求解微分方程的数值解。
本文标题:数学建模MATLAB程序设计专题
链接地址:https://www.777doc.com/doc-6058465 .html