《23 Matlab编程.pdf》由会员分享,可在线阅读,更多相关《23 Matlab编程.pdf(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2.3 Matlab 编程2.3 Matlab 编程前面大家已经看到,为某个目的,大量的、经常出现的前面大家已经看到,为某个目的,大量的、经常出现的命令,不是直接加在命令,不是直接加在 Matlab 提示符下,而是存放在一个提示符下,而是存放在一个专门的文件里。象这样把一些需要的专门的文件里。象这样把一些需要的 Matlab 命令,放到M命令,放到M文件文件编辑/调试器(Editor/Debugger)窗口编辑/调试器(Editor/Debugger)窗口,保存为一个,保存为一个单独的M文件,这就是单独的M文件,这就是 Matlab 编程了。编程了。当然,前面的编程相对比较简单。如果要解决复杂
2、的问当然,前面的编程相对比较简单。如果要解决复杂的问题,不仅要用到顺序结构,还可能需要用到判断,分支选题,不仅要用到顺序结构,还可能需要用到判断,分支选择,循环和控制转移等语法结构,甚至要用到结构体和单择,循环和控制转移等语法结构,甚至要用到结构体和单元,结构数组和细胞数组以及类和对象等概念。元,结构数组和细胞数组以及类和对象等概念。变量MATLAB中变量的中变量的命名规则命名规则是:是:(1)变量名必须是不含空格的单个词;)变量名必须是不含空格的单个词;(2)变量名区分大小写;)变量名区分大小写;(3)变量名最多不超过)变量名最多不超过19个字符;个字符;(4)变量名必须)变量名必须以字母打
3、头以字母打头,之后可以是 任意字母、,之后可以是 任意字母、数字或下划线,数字或下划线,但但变量名中不允许使用标点符号变量名中不允许使用标点符号.特殊变量表特殊变量取 值ans用于结果的缺省变量名pi圆周率eps计算机的最小数,当和 1 相加就产生一个比1 大的数flops浮点运算数inf无穷大,如 1/0NaN不定量,如 0/0i,ji=j=1nargin所用函数的输入变量数目nargout所用函数的输出变量数目realmin最小可用正实数realmax最大可用正实数数学运算符号及标点符号+加法运算,适用于两个数或两个同阶矩阵相加.减法运算*乘法运算.*点乘运算/除法运算./点除运算乘幂运算
4、.点乘幂运算反斜杠表示左除.数学运算符号及标点符号数学运算符号及标点符号(1)MATLAB的每条命令后,若为的每条命令后,若为逗号逗号或或无标点无标点符号,符号,则显示命令的结果;若命令后为则显示命令的结果;若命令后为分号分号,则禁止显示结果,则禁止显示结果.(2)“%”后面所有文字为后面所有文字为注释注释.(3)“.”表示续行表示续行.Matlab提供了两种源程序文件格式:命令文件和函数文件,这两种文件的扩展名相同,均为提供了两种源程序文件格式:命令文件和函数文件,这两种文件的扩展名相同,均为“.m.m”,称之为M文件。,称之为M文件。命令文件命令文件M 文件M文件的一般格式为:文件的一般格
5、式为:(ex33.m)注释注释%地形图地形图 thiss a map of the earth.指令指令 clear allload earthimage(X);colormap(map)axis equal 结束结束 end%可以没有可以没有函数文件而且当它不是独立使用,而是某个主文件的子函数时,应该保存在而且当它不是独立使用,而是某个主文件的子函数时,应该保存在同一个文件夹同一个文件夹下。函数文件的一般格式为:下。函数文件的一般格式为:格式格式 function y=time(x)注释注释%-%可以有很多行或没有可以有很多行或没有指令指令 clear ally=1;for k=1:1:x;
6、y=y*k;end 结束结束 end%该行可以没有该行可以没有函数文件必须保存为函数文件必须保存为time.m,例例 定义函数定义函数 f(x1,x2)=100(x2-x1 2)2+(1-x1)2.解 建立解 建立M文件:文件:fun.mfunction f=fun(x)f=100*(x(2)-x(1)2)2+(1-x(1)2可以直接使用函数可以直接使用函数 fun.m 名来调用它名来调用它.例如:计算例如:计算 f(1,2),只需在只需在 Matlab 命令窗口键入命令:命令窗口键入命令:x=1 2fun(x)而得其值而得其值.常用数学函数函 数名 称函 数名 称sin(x)正弦函数asin
7、(x)反正弦函数cos(x)余弦函数acos(x)反余弦函数tan(x)正切函数atan(x)反正切函数abs(x)绝对值max(x)最大值min(x)最小值sum(x)元素的总和sqrt(x)开平方exp(x)以e为底的指数log(x)自然对数)(log10 x以10为底的对数sign(x)符号函数fix(x)取整控制结构Matlab提供了三种常用的控制结构:顺序结构、分支结提供了三种常用的控制结构:顺序结构、分支结构和循环结构。这些结构经常包含大量的构和循环结构。这些结构经常包含大量的Matlab命令,故命令,故常出现在命令文件或函数文件中,而不是直接加在常出现在命令文件或函数文件中,而不
8、是直接加在Matlab提示符下。提示符下。顺序结构顺序结构顺序结构是由两个程序模块串接构成,一个程序模块可顺序结构是由两个程序模块串接构成,一个程序模块可以是一条语句、一段程序、一个函数等。以是一条语句、一段程序、一个函数等。在用Matlab编写程序时实现顺序结构的方法非常简单:在用Matlab编写程序时实现顺序结构的方法非常简单:只需将两个模块顺序排列。只需将两个模块顺序排列。顺序结构顺序结构是由两个程序模块串接构成,一个程序模块可顺序结构是由两个程序模块串接构成,一个程序模块可以是一条语句、一段程序、一个函数等。以是一条语句、一段程序、一个函数等。在用Matlab编写程序时实现顺序结构的方
9、法非常简单,在用Matlab编写程序时实现顺序结构的方法非常简单,只需将两个模块顺序排列。只需将两个模块顺序排列。顺序结构流程顺序结构流程选择结构选择选择结构流程结构流程?条件?条件否是否是程序模块1程序模块1程序模块2程序模块2在在Matlab中选择结构中选择结构可以由可以由ifelseend或或Switch case otherwise end语句来实现。具体格式与语句来实现。具体格式与c语言中相似。即语言中相似。即ifelseend 的语句格式是:的语句格式是:或或不止一个选择分支不止一个选择分支if 逻辑表达式程序模块1else程序模块2endif 逻辑表达式程序模块1else程序模块
10、2end只有一个选择分支只有一个选择分支if 逻辑表达式程序模块endif 逻辑表达式程序模块endSwitch case otherwise语句的格式是:语句的格式是:switch case模块模块1case模块模块2 otherwise模块模块nend例例1 编写一个函数模块,将百分制的学生成绩转换成编写一个函数模块,将百分制的学生成绩转换成5分制。分制。function f=trangrade(x)switch fix(x/10)%fix去尾法求整去尾法求整case 10,9f=A;case 8f=B;case 7f=C;case 6f=D;otherwisef=E;end循环结构循环循
11、环结构流程结构流程?条件?条件否是否是程序模块程序模块循环循环结构可由结构可由 while 型循环结构或型循环结构或 for 型循环这两个结构模块之一去实现。它们的功能上有些差别。型循环这两个结构模块之一去实现。它们的功能上有些差别。while 循环结构的具体形式是:循环结构的具体形式是:for 循环的具体形式是:循环的具体形式是:while endfor 循环变量循环变量=初值:增量:结束值初值:增量:结束值程序模块程序模块;end如果循环体的执行程序模块中有如果循环体的执行程序模块中有break或或continue语句,则跳出包含语句,则跳出包含break语句的语句的当前的(最内层)循环当
12、前的(最内层)循环或者提前结束或者提前结束包含包含continue语句的语句的 while型循环型循环 的的本次本次循环。循环。例如例如,下列循环模块,其逻辑顺序为:,下列循环模块,其逻辑顺序为:While程序模块1程序模块1if break;end程序模块2程序模块2end?条件1?条件1程序模块1程序模块1?条件2?条件2程序模块2否否是是程序模块2否否是是跳出了包含跳出了包含 break 语句的语句的当前(最内层)当前(最内层)While 循环循环再比如再比如,下面的循环,下面的循环模块,其逻辑关系为:模块,其逻辑关系为:While程序模块1程序模块1if continue;end程序模
13、块2程序模块2end 是是?条件1?条件1程序模块1程序模块1?条件2?条件2程序模块2否是程序模块2否是只是提前结束了只是提前结束了while 型循环体内型循环体内的的本次本次循环循环递归循环递归循环是一种特殊的循环递归循环是一种特殊的循环结构,对某些复杂的、困难结构,对某些复杂的、困难的问题,的问题,递归循环有其特别的作用。递归循环有其特别的作用。可以举例阶乘问题,河内塔问题。可以举例阶乘问题,河内塔问题。1、关系操作符1、关系操作符关系与逻辑运算关系操作符说明小于大于=大于或等于=等于=不等于2 2、逻辑运算符逻辑运算符逻辑操作符说明与或非关系操作符关系操作符与与逻辑运算符逻辑运算符是是
14、Matlab编程中经常要用到编程中经常要用到的的.例例2 矩阵指数的幂级数展开式定义为矩阵指数的幂级数展开式定义为eA=E+A+A2/2!+A3/3!+利用利用 while 循环,求矩阵的指数循环,求矩阵的指数 eA。解解 先编写一个子函数先编写一个子函数myexp.m如下如下function f=myexp(a)e=eye(size(a);f=zeros(size(a);k=1;while norm(e)0%矩阵的范数矩阵的范数(大于大于eps)f=f+e;e=a*e/k;k=k+1;end剩下来就是对具体的矩阵剩下来就是对具体的矩阵A,调用子函数,调用子函数myexp.m,而而得到它的指数
15、得到它的指数eA值。例如值。例如见见 ex2.m%矩阵指数幂的编程计算矩阵指数幂的编程计算clear allglobal kA=1 2;3 4;disp()B=myexp(A);disp(矩阵指数幂的求和项数为矩阵指数幂的求和项数为:)n=k+1disp(矩阵指数矩阵指数B=eA的求和结果是的求和结果是:)B输出的结果是输出的结果是:矩阵指数幂的求和项数为矩阵指数幂的求和项数为:n=261矩阵指数矩阵指数 B=eA 的求和结果是的求和结果是:B=51.9690 74.7366112.1048 164.0738例例3 同时画几个花瓣状图形编程如下:同时画几个花瓣状图形编程如下:见见ex3.mtheta=-pi:0.01:pi;rho(1,:)=2*sin(5*theta).2;rho(2,:)=cos(10*theta).3;rho(3,:)=sin(theta).2;rho(4,:)=5*cos(3.5*theta).3;for i=1:4polar(theta,rho(i,:)%极坐标下作图极坐标下作图pauseend完完
限制150内