matlab m文件与程序设计2012.ppt_第1页
matlab m文件与程序设计2012.ppt_第2页
matlab m文件与程序设计2012.ppt_第3页
matlab m文件与程序设计2012.ppt_第4页
matlab m文件与程序设计2012.ppt_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、M文件与程序设计,2,2020/8/6,用MATLAB语言编写的程序,称为M文件。 M文件有两种形式 : 脚本文件(Script File) 函数文件(Function File ) 这两种文件的扩展名,均为“ . m” 。,1. M文件,3,2020/8/6,脚本文件和函数文件,1、 M脚本文件(Script File) 实际上是一串MATLAB指令集合。,对于比较简单的问题 ,在命令窗口中直接输入指令 。,对于复杂计算,采用脚本文件(Script file)最为合适 。,MATLAB只是按文件所写的指令执行。 与在命令窗口逐行执行文件中的所有指令,其结果是一 样的。 没有输入参数,也不返回

2、输出参数。,4,2020/8/6,例:建立一个脚本文件(命令文件)将a,b的值互换,然后运行该m文件。,1、 新建m文件,并以m1.m保存 clear a=1,2,3, b=4,5,6 c=a; a=b; b=c; a b 2、在MATLAB的命令窗口中输入m1,将会执行该命令文件。,5,2020/8/6,M脚本文件的特点:,脚本文件的构成比较简单,只是一串按用户意图排列而成的(包括控制流向指令在内的)MATLAB指令集。,脚本文件运行后 ,所产生的变量都驻留在 MATLAB基本工作空间(Base workspace)中。只要用户不使用清除指令(clear), MATLAB指令窗不关闭,这些变

3、量将一直保存在基本工作空间中。,6,2020/8/6,2、M函数文件(Function File ),与脚本文件不同 ,函数文件犹如一个“黑箱”,把一些数据送进并经加工处理,再把结果送出来。,MATLAB提供的函数指令大部分都是由函数文件定义的,例如 inv, abs和 sqrt Y=abs(X),用户可以根据需要编辑自己的m函数,它们可以像库函数一样方便的调用,从而极大地扩展了matlab 的能力。 可以输入参数,也可返回输出参数,7,2020/8/6,例:编写一个函数文件,实现直角坐标(x,y)与极坐 标(r,)之间的转换。,function r,theta = tran(x,y) r =

4、sqrt(x*x+y*y); theta =atan(y/x);,调用 tran函数 x0=3;y0=4; r,t=tran(x0,y0),tran.m,8,2020/8/6,M函数文件的特点:,从形式上看 ,与脚本文件不同 ,函数文件的笫一行 总是以 “function”引导的“函数申明行”。,从运行上看 ,与脚本文件运行不同 ,M函数中使用 的变量都是局部变量,即在该函数返回之后,这些变 量会自动在MATLAB的工作空间中清除掉。,9,2020/8/6,m函数文件必须由function作为引导词,必须遵循如下形式: function 输出形参表 = 函数名(输入形参表) %注释说明部分 函

5、数体,1)m函数文件格式,10,2020/8/6,例:编写函数,求半径为r的圆的面积和周长 fcircle.m文件代码如下: function s, p= fcircle (r) % CIRCLE calculate the area and perimeter of a circle % of radial r s=pi*r*r; p=2*pi*r;,11,2020/8/6,规则和属性 1.函数名和文件名必须相同。 2. 函数可以有零个或更多个输入参量,也可以有零个或更多个输出参量。当有一个以上输出变量时,输出变量包含在括号内。例如, V,D=eig(A) 3.函数中的变量均为局部变量,不保

6、存在工作空间中。其变量只在函数运行期间有效。函数内变量与MATLAB工作空间之间唯一的联系是函数的参数。,12,2020/8/6,2)函数调用,函数调用的一般格式是: 输出实参表=函数名(输入实参表),函数定义: function s, p= fcircle (r) % CIRCLE calculate the area and perimeter of a % circle of radial r s=pi*r*r; p=2*pi*r;,函数调用 area, l=fcircle(1),13,2020/8/6,函数调用可以嵌套,一个函数可以调用别的函数,甚至调用它自己 (递归调用)。,14,2

7、020/8/6,3)局部变量和全局变量,局部(Local)变量:它存在于函数空间内部的中间变量,产生于该函数的运行过程中,其影响范围也仅限于该函数本身 。,全局(Global)变量:通过 global 指令,MATLAB也允许几个不同的函数空间以及基本工作空间共享同一个变量,这种被共享的变量称为全局变量。,全局变量用global命令定义,格式为: global 变量名,15,2020/8/6,【例】 全局变量应用示例,先建立函数文件wadd.m,该函数将输入的参数加权相加。 function f=wadd(x,y) %add two variable global ALPHA BETA f=A

8、LPHA*x+BETA*y;,在命令窗口中输入: global ALPHA BETA ALPHA=1; BETA=2; s=wadd(1,2) 输出为: s = 5,全局变量的作用域是整个MATLAB工作空间, 所有的函数都可以对它进行存取和修改。因此, 定义全局变量是函数间传递信息的一种手段。,16,2020/8/6,4 )函数所传递参数的可调性,MATLAB在函数调用上有一个与众不同之处: 函数所传递参数数目的可调性。 凭借这一点,一个函数可完成多种功能。 linspace(d1,d2,n) linspace(d1,d2) E = EIG(X) V,D = EIG(X) 两个特殊变量 na

9、rgin 所用函数的输入参量个数 nargout 所用函数的输出参量个数,17,2020/8/6,【例】 nargin用法示例,函数文件examp.m: function f=examp(a,b,c) if nargin=1 f=a; elseif nargin=2 f=a+b; elseif nargin=3 f=(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,18,2020/8/6,在调

10、用函数时,MATLAB用两个永久变量 nargin和nargout. 分别记录调用该函数时的输入 实参和输出实参的个数。只要在函数文件中包含 这两个变量,就可以准确地知道该函数文件被调 用时的输入输出参数个数,从而决定函数如何进 行处理。,19,2020/8/6,input函数:用于向计算机输入一个参数。 调用格式: A=input(提示信息,选项); a=input(a=); xm=input(Whats your name:,s),1数据的输入输出,2、 程序设计,20,2020/8/6,【例】 求一元二次方程a2 +bx+c=0的根。,a=input(a=?); b=input(b=?)

11、; c=input(c=?); d=b*b-4*a*c; x=(-b+sqrt(d)/(2*a),(-b-sqrt(d)/(2*a) 将该程序以aa.m文件存盘,然后运行aa.m文件。,21,2020/8/6,pause函数:暂停程序的执行。 调用格式: pause(延迟秒数) 注:如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。,disp函数:命令窗口输出函数。 调用格式: disp(输出项) 注:输出项为字符串或矩阵。 例如:A=Hello,MATLAB; disp(A) 输出为: Hello,MATLAB,22,2020/8/6,(一)选择结构,选择结

12、构的语句有if语句和switch语句。 1 if语句 格式一: if 条件 语句组 end,格式二: if 条件 语句组1 else 语句组2 end,23,2020/8/6,格式三: if 条件1 语句组1 elseif 条件2 语句组2 elseif 条件m 语句组m else 语句组m+1 end,常见错误分析,24,2020/8/6,2. switch语句,switch语句根据变量或表达式的取值不同,分别 执行不同的语句。其格式为: switch 表达式 case 值1 语句组1 case 值2 语句组2 case 值m 语句组m otherwise 语句组m+1 end,25,202

13、0/8/6,例:键盘输入两个大小不等的数a, b。比较并显示它们的大小关系。,a=input(a=); b=input(b=); if ab disp(a b); else disp(ab); end,26,2020/8/6,程序段:,n=input(please input a number:); if n 0 disp (Input must be positive); elseif rem(n,2) = 0 a = n/2 else a = (n+1)/2 end,27,2020/8/6,switch num case -1 disp(child); case 0 disp(the yo

14、ung); case 1 disp(adult); otherwise disp(the old); end,例:根据变量 num 的值来决定显示的内容。,28,2020/8/6,在条件表达式中,通常都是由 关系操作符 , =, = =, = 等 逻辑操作符 for n = 2:6 x(n) = 2 * x(n - 1); end,x = 1 2 4 8 16 32,例:for语句构成的程序段,32,2020/8/6,例:利用for循环求1!+2!+3!+ +5!的值 sum=0; for i=1:5 sum=sum+prod(1:i); end sum,33,2020/8/6,例:求向量x的

15、各元素的平方和 x = input (x=); s=0; for i=1:length(x) s=s+x(i)2; end s,34,2020/8/6,for 循环变量 = 矩阵表达式 a= 1 2 3 ; 5 6 7 ; 9 10 11 执行过程是依次将矩阵 的各列元素赋给循环变量,for i=a y=i(1)+i(2)+i(3); end,y = 15 y = 18 y = 21,35,2020/8/6,For example, this while loop finds the first integer n for which n! (n factorial) is a 5-digit number. n = 1; while prod(1:n) 1e5 n = n + 1; end break continue,36,2020/8/6,3 循环的嵌套,如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,37,2020/8/6,例: 写出下列程序的输出结果: s=0; a=2,3,4; 5,6,7; 8,9,0; 1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论