《Matlab教学第五章MATLAB程序设计.ppt》由会员分享,可在线阅读,更多相关《Matlab教学第五章MATLAB程序设计.ppt(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Lecture 5 MATLAB程序设计程序设计基本要求:基本要求:(1)学会学会 Matlab 的的M文件的编写方法,包括命令文件和函数文件。了文件的编写方法,包括命令文件和函数文件。了解解M件的调试命令和调试方法件的调试命令和调试方法;(2)熟练掌握熟练掌握 Matlab 的的程序结构程序结构(顺序结构、循环结构和分支结构(顺序结构、循环结构和分支结构)与流程控制语句与流程控制语句.Outline M-file(M文件文件);数据的输入和输出数据的输入和输出;程序设计程序设计;函数文件函数文件;全局变量和局部变量全局变量和局部变量Lecture5 Matlab语言程序言程序设计 MATLA
2、B有两种工作方式:有两种工作方式:交互式的命令行工作方式 M文件的程序工作方式一.M文件一.M文件用MATLAB语言编写的程序,称为M文件。M文件有两类:命令文件和函数文件。命令文件命令文件:没有输入参数,也不返回输出参数。函数文件函数文件:可以输入参数,也可返回输出参数。M文件的建立与编辑建立新的M文件:从MATLAB命令窗口的File菜单中选择New菜单项,再选择M-file命令。一.M文件编辑已有的M文件:从MATLAB命令窗口的Flie菜单中选择Open M-file命令。命令文件将需要运行的命令编辑到一个命令文件中,然后在MATLAB命令窗口输入该命令文件的名字,就会顺序执行命令文件
3、中的命令。【例【例1 1】建立一个命令文件将变量建立一个命令文件将变量a,b的值互换。的值互换。一.M文件 a=1:9;b=11,12,13;14,15,16;17,18,19;c=a;a=b;b=c;a b 在MATLAB的命令窗口中输入e31,将会执行该命令文件。二数据的输入输出1.input函数:函数:用于向计算机输入一个参数。调用格式:A=input(提示信息,选项);注:注:s选项,则允许用户输入一个字符串。选项,则允许用户输入一个字符串。例如想输入一个人的姓名,可采用命令 xm=input(Whats your name:,s)【例2】求一元二次方程a2+bx+c=0的根。二数据的
4、输入输出 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)将该程序以aa.m文件存盘,然后运行aa.m文件。2 pause函数:函数:暂停程序的执行。调用格式:pause(延迟秒数)注:如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。二数据的输入输出 3 disp函数:函数:命令窗口输出函数。调用格式:disp(输出项)注:输出项为字符串或矩阵。例如 A=Hello,MATLAB;disp(A)输出为:Hello,MATLAB三程序
5、设计三程序设计三程序设计1、程序结构与流程控制语句、程序结构与流程控制语句 a)顺序结构顺序结构b)条件结构条件结构if-else-end 语句语句三程序设计三程序设计或或折扣问题折扣问题 book=20;number=40;sums=0.0;if number=30sums=book*number*0.7;end sums sums=560绘出函数绘出函数 的图像。的图像。x=-3:0.1:3;if x=1 y=2*x.2+1;plot(x,y)elseif-1xA(3)&A(1)+A(3)A(2)&A(2)+A(3)A(1)p=(A(1)+A(2)+A(3)/2;s=sqrt(p*(p-A
6、(1)*(p-A(2)*(p-A(3);disp(s);else disp(不能构成一个三角形。)end运行:请输入三角形的三条边:4 5 6 9.9216三程序设计(一)选择结构【例5】输入一个字符,若为大写字母,则输出其后继字符,若为小写字母,则输出其前导字符,若为其他字符则原样输出。c=input(,s);if c=A&c=a&c No=input(Please input your choice!);Please input your choice!1 switch Nocase 0disp(return to main menu);case 1disp(She is a girl);
7、case 2disp(He is a boy);otherwisedisp(I cant determine)endShe is a girlc)循环结构循环结构while 语句语句:for语句语句:for 变量=初值:增量:结束值 程序模块;end三程序设计三程序设计 sum=0;i=0;while(i sumsum=14196774举例举例:三程序设计三程序设计 for I=1:10 A(I)=1/(I+1);end AA=Columns 1 through 7 0.5000 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 Columns 8 throu
8、gh 10 0.1111 0.1000 0.0909break语句语句循环结构循环结构continue 语句语句循环结构循环结构三程序设计三程序设计d)其它与流程控制有关的语句其它与流程控制有关的语句ifif(二)循环结构实现循环结构的语句:for语句和while语句。1 for语句:语句:格式:for 循环变量=表达式1:表达式2:表达式3 循环体语句 end注:其中表达式1的值为循环变量的初值,表达式2的值为步长,表达式3的值为循环变量的终值。步长为1时,表达式2可以省略。三程序设计2 while语句语句格式为:while(条件)循环体语句 end【例7】根据例3.6中求y的表达式,求:(
9、1)y3 break;end i=i+1;end n=i-1 y=y-f三程序设计(二)循环结构 3 循环的嵌套循环的嵌套如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。多重循环的嵌套层数可以是任意的。可以按照嵌套层数,分别叫做二重循环、三重循环等。处于内部的循环叫作内循环,处于外部的循环叫作外循环。三程序设计(二)循环结构【例8】求100,1000以内的全部素数。n=0;for m=100:1000 flag=1;j=m-1;i=2;while i=j&flag if rem(m,i)=0 flag=0;end i=i+1;end if flag n=n+1
10、;prime(n)=m;end end prime%变量prime存放素数三程序设计(二)循环结构pause 指令指令使程序运行停止,等待用户按任意键继续;使程序运行停止,等待用户按任意键继续;input 指令指令提示用户从键盘输入数值、字符串或表达式,并接受输入;提示用户从键盘输入数值、字符串或表达式,并接受输入;disp指令指令在屏幕上显示字符串在屏幕上显示字符串;echo on指令指令显示其后所有执行文件的指令;显示其后所有执行文件的指令;echo off指令指令关闭其后所有执行文件的指令显示。关闭其后所有执行文件的指令显示。三程序设计三程序设计四函数文件函数文件是另一种形式的M文件,每
11、一个函数文件都定义一个函数。事实上,MATLAB提供的标准函数大部分都是由函数文件定义的。四.函数文件1函数文件格式函数文件格式函数文件由function语句引导,其格式为:function 输出形参表=函数名(输入形参表)注释说明部分 函数体注:其中函数名的命名规则与变量名相同。输入形参为函数的输入参数,输出形参为函数的输出参数。当输出形参多于1个时,则应该用方括号括起来。【例9】编写函数文件求小于任意自然数n的Fibonacci数列各项。function f=ffib(n)%用于求Fibonacci数列的函数文件%f=ffib(n)%1999年9月30日编 f=1,1;i=1;while
12、f(i)+f(i+1)n f(i+2)=f(i)+f(i+1);i=i+1;end将以上函数文件以文件名ffib.m存 盘,然 后 在MATLAB命令窗口输入以下命令,可求小于2 000的Fibonacci数。ffib(2000)四.函数文件2函数调用函数调用 函数文件编制好后,就可调用函数进行计算了。如上面定义ffib函数后,调用它求小于2000的Fibonacci数。函数调用的一般格式是:输出实参表=函数名(输入实参表)四.函数文件【例10】利用函数文件,实现直角坐标(x,y)与极坐标(,)之间的转换。函数文件tran.m:function gama,theta=tran(x,y)gama
13、=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已知转换公式为:极坐标的矢径:=极坐标的幅角:=四.函数文件【例11】利用函数的递归调用,求n!。function f=factor(n)if n=1 f=1;else f=factor(n-1)*n;end return;%返回 在命令文件main2.m中调用函数文件factor.m:for i=1:10 fac(i)=factor(i)
14、;end fac程序运行结果是:fac=Columns 1 through 6 1 2 6 24 120 720 Columns 7 through 10 504 40320 362880 3628800四.函数文件3 函数所传递参数的可调性函数所传递参数的可调性MATLAB在函数调用上有一个与众不同之处:函数所传递参数数目的可调性。凭借这一点,一个函数可完成多种功能。在调用函数时,MATLAB用两个永久变量nargin和nargout分别记录调用该函数时的输入实参和输出实参的个数。只要在函数文件中包含这两个变量,就可以准确地知道该函数文件被调用时的输入输出参数个数,从而决定函数如何进行处理。
15、四.函数文件【例12】nargin用法示例函数文件examp.m:function fout=charray(a,b,c)if nargin=1 fout=a;elseif nargin=2 fout=a+b;elseif nargin=3 fout=(a*b*c)/2;end命令文件mydemo.m:x=1:3;y=1;2;3;examp(x)examp(x,y)examp(x,y,3)执行mydemo.m后的输出是:ans=1 2 3 ans=2 4 6 ans=21四.函数文件五全局变量和局部变量 在MATLAB中,全局变量用命令global定义。函数文件的内部变量是局部的,与其他函数文
16、件及MATLAB工作空间相互隔离。但是,如果在若干函数中,都把某一变量定义为全局变量,那么这些函数将公用这一个变量。全局变量的作用域是整个MATLAB工作空间,即全程有效。所有的函数都可以对它进行存取和修改。因此,定义全局变量是函数间传递信息的一种手段。四.函数文件四.函数文件【例13】全局变量应用示例先建立函数文件wadd.m,该函数将输入的参数加权相加。function f=wadd(x,y)%add two variable global ALPHA BETA f=ALPHA*x+BETA*y;在命令窗口中输入:global ALPHA BETA ALPHA=1;BETA=2;s=wadd(1,2)输出为:s=5