




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五讲 Matlab的程序设计, Matlab语言称为第四代编程语言,程序简洁、可读性很强而且调试十分容易, 是Matlab重要组成部分。要充分体现和发挥Matlab的能力,必 须掌握Matlab程序设计,包括以下内容:,M文件的功能和特点 M文件的形式 数据结构和全局变量 程序结构 程序流控制 字符与字符串 函数调用及变量传递 M文件的调试,一、m文件的功能和特点,用户如想灵活应用Matlab去解决实际问题,充分调用Matlab的科学技术资源,就需要编辑m文件 包含Matlab语言代码的文件称为m文件,其扩展名为.m。 编辑m文件可使用各种文本编辑器。,二、Matlab的工作方式,指令行操作
2、方式 通常Matlab以指令驱动模式工作,即在Matlab 窗口下当用户输入单行指令时,Matlab 立即处理这条指令,并显示结果,这就是Matlab命令行方式。 命令行操作时,Matlab窗口只允许一次执行一行上的一个或几个语句。,在Matlab窗口输入数据和命令进行计算时,当处理复杂问题和大量数据时是不方便的。因此应编辑m文件。 命令行方式程序可读性差,而且不能存储,对于复杂的问题,应编写成能存储的程序文件。,m文件的编程工作方式 将Matlab语句构成的程序存储成以m为扩展名的文件,然后再执行该程序文件,这种工作模式称为程序文件模式。 程序文件不能在指令窗口下建立,因为指令窗口只允许一次
3、执行一行上的一个或几个语句。,三、 m文件的形式 m文件的语法类似于c语言,但又有其自身特点。它只是一个简单的ASCII码文本文件,执行程序时逐行解释运行程序,Matlab是解释性的编程语言。 m文件有两类 独立的m文件 称命令文件 可调用m文件 称函数文件 (1). 命令文件 简单的m文件 命令文件实际上是一串指令的集合,与在命令窗口逐行执行文件中的所有指令,其结果是一样的。没有输入输出参数。,%一个用以绘制花瓣(flower petal)图案的命令文件 theta=-pi:0.01:pi; rho(1,:)=2*sin(5*theta).2; rho(2,:)=cos(10*theta).
4、3; rho(3,:)=sin(theta).2; rho(4,:)=5*cos(3.5*theta).3; for i=1:4 polar(theta,rho(i,:); pause end,说明:,符号%引导的是注释行,不予执行. 不需要end作为M文件的结束标志. 若把untitle.m存放在自己的工作目录中,那么在运行untitle.m之前,就使自己的工作目录处于Matlab的搜索路径上。 文件运行后,存放在内存的变量可以通过whos指令看到,也可在workspace中看到。,(2) Matlab内置函数文件 Matlab自定义的函数文件称内置函数文件. 调用内置函数的方法:使用函数名
5、并给出相应的入口、出口参数即可。 例如:sin.m函数用type sin查不到。 调用格式:y=sin(2*x) 实际应用中: x=0:2*pi/180:2*pi; y=sin(2*x) plot(x,y),又如 sqrt(x) 求x的平方根 abs(x) 求x的绝对值 det(a) 求行列式的值 等等。 Matlab拥有大量的内置数学函数,供我们在数值运算和符号运算中调用。,(3) 函数m文件 需要输入变量,返回输出变量 Matlab用户可以根据需要编辑自己的m文件,它们可以像库函数一样方便的调用,从而极大地扩展了 对于某一类特殊问题,如创建了许多m函数文件,则可形成新的工具箱。 这种用Ma
6、tlab语言创建定义新的Matlab函数的功能,正体现了Matlab语言强大的扩展功能。,函数m文件的格式: function 返回变量=函数名(输入变量) 注释说明语句段 程序语句段 特定规则: 函数m文件第一行必须以单词function作为引导词,必须遵循如下形式: function =() m文件的文件名必须是 .m。 程序中的变量均为局部变量,不保存在工作空间中。其变量只在函数运行期间有效。当函数文件执行完后,这些内部变量将被清除。,例2:计算向量元素的平均值,(1)建立函数文件,内容如下: function y=average(x) %向量元素的平均值 %语法:average(x),
7、其中x为输入向量 %当输入非向量时,给出错误信息 m,n=size(x); if(m=1)|(n=1)|(m=1,(2)将文件average.m存盘,该文件定义了名为average的新函数。 (3)在指令窗中运行以下指令,可以求得1到100的平均值 average(1:100) ans = 50.5000,说明,第一行指令的作用:指明该文件是函数文件;定义函数名、输入参数和输出参数。 变量x对函数文件average.m来说是局部的,当该函数被调用结束后,变量x不再存在,这可以用who验证。 在m文件前面连续几行带符号%的注释行有两个作用:一是起注释作用;二是起help指令联机查询用。如:hel
8、p average,(4). 系统文件s函数 用于描述系统运动的专用函数,是特殊的 m 文件。 s 函数有3类: 由simulink结构图自动创建 可用c语言程序设计mex文件直 接定义 用函数m文件编写 s函数一旦创建,即可在框图中使用,也可在文件中调用。,S函数的调用格式 sys, x0=sfunction( t, x, u, flag) S函数与函数m文件类似,只是输入、输出变量是限定的。,系统状态,状态初值,用户定义的系统,当前时刻,当前状态值,当前输入值,标志量,三、数据结构和全局变量,数组(array),字符型 (char),结构型 (struct),单元型 (cell),双精度型
9、 (double),数值型(numeric),整型(storage) (int8,uint8,int16,uint16,int32,uint32),图:Matlab的数据结构,数值变量的类型可以用file菜单中preference子菜单中的general命令或format指令控制。 isstr可用以检测变量是否为字符型,返回值为1,则是字符型;0则不是. 对于其他变量可以用class(V)来得到其变量的类型。,在Matlab中全局变量用global定义,全局变量可以被所有定义该变量为全局变量的函数使用。全局变量的的作用域是整个Matlab的工作区,即全程有效,所以的函数都可以对他进行存取和修改
10、。 如:global XYZ,则将X,Y,Z定义为全局变量。 在程序设计中,全局变量可以带来一些数据传递的方便,但是也破坏了函数对变量的封装,降低了程序的可读性和可靠性。 函数文件的内部变量是局部的,与其他函数文件及Matlab内存相互隔离。,下面为一个使用全局变量的例子。,函数文件weight_add.m: function all=weight_add(x,y) %两个不同权系数的变量相加 global ALPHA BETA all=ALPHA*x+BETA*y; 命令文件: global ALPHA BETA ALPHA=1; BETA=2; all=weight_add(1,1) 结果
11、:all=3,运算符,逻辑操作符,例:表示不连续信号,x=linspace(0,5,100);%0到5中间产生100个数据点 y=cos(x); z=(y=0).*y;%将cos函数的负数置为零 z=z+0.3*(y0);%将cos函数的负数值增加0.3 z=(x=4).*z;%将x超过4时z的值置为零 plot(x,z) xlabel(x);ylabel(z=f(x);title(一个不连续信号);,四、Matlab的程序结构,Matlab语言的程序结构与其它高级语言是一致的,分为顺序结构,循环结构,分支结构。 (1).顺序结构 依次顺序执行程序的各条语句,(2).循环结构 被重复执行的一组
12、语句,循环是计算机解决问题的主要手段。Matlab提供了两种循环方式:for-end 循环和while-end循环。 for end 语法为: for i = 表达式 (表达式为一个向量) 可执行语句 end,例:利用for循环求1!+2!+3!+ +5!的值 sum=0; for i=1:5 pdr=1; for k=1:i pdr=pdr*k; end sum=sum+pdr; end,sum = 153, while end 循环 while循环将循环体中的语句循环执行不定次数。 语法为:while 表达式 循环体语句 end 表达式一般是由逻辑运算和关系运算以及一般运算组成的,以判断循
13、环的进行和停止;只要表达式的值 非0,继续循环;直到表达式值为0,循环停止。,例:用while循环求1100间整数的和 sum=0; i=1; while i=100 sum=sum+i; i=i+1; end sum sum = 5050,(3). 分支结构根据一定条件来执行的各条语句。 if else end语句有3种形式 if 表达式 执行语句 end if 表达式 是 语句1 else 否 语句2 end, if 表达式1 多分支 语句1 elseif 表达式2 语句2 elseif 表达式3 语句3 else 语句n end,这种结构实现了一种多路选择,比较复杂。可替代一般高级语言中
14、的switch-case-end语句,在条件表达式中,通常都是由 关系操作符 , =, = =, = 等 逻辑操作符 cost=apples*2.5; if apples5 cost=0.8*cost; end; cost,例:编写m函数,计算函数值 x (x=10),function value=calculate(x); if x1 value=x; elseif x10 value=2*x-1; else value=3*x-11; end;,五、Matlab程序流的控制,Matlab的控制语句同c语言有相似之处, 但没有c 语言复杂、灵活和多变。因而语法比较简单,容易掌握。 echo
15、指令 用来控制m文件在执行过程中是否 显示 echo on 打开所有命令文件的显示方式 echo off 关闭所有命令文件的显示方式 echo 在以上两者间切换,echo对于命令文件函数文件有所不同,命令文件用法简单,echo对所有命令起作用;函数文件用法较复杂,具体请help查询。 echo file on 打开file函数文件的显示方式 echo file off 关闭file函数文件的显示方式 echo file 切换file函数文件的显示方式 echo on all 打开所有函数文件的显示方式 echo off all 关闭所有函数文件的显示方式,input 提示用户从键盘输入数值、字
16、符串、表达式。 例:n=input(How many apples= ) How many apples= 5 n = 5 pause 暂停,等待用户响应 可令m文件执行暂停,并在继续执行前按任一个键 。,keyboard 与input类似,功能更强 keyboard 调用键盘与调用m文件一样,当keyboard在m文件中出现时,它停止文件的执行并控制键盘,用于修改程序。 break 中断 break 中断for, while循环语句的执行,在嵌套循环结构中, break进从最里层循环推出。 menu 产生一个用户可选择输入的菜单 格式:k=menu( 标题,菜单1,菜单2 ),六、字符与字符
17、串,在Matlab中关于字符串有以下几点规则: 在Matlab中所有字符串都用单引号界定后输入或赋值。 如:s=hello,的运行结果是 s = hello 字符串的每个字符(空格也是字符)都是响应矩阵的一个元素。如上s是一个15的矩阵。可用size查得。 字符以ASCII码存储,用abs 指令可看到字符的ASCII值。 abs(s) ans = 104 101 108 108 111,可用setstr实现ASCII码值向字符的转换。 字符串变量也可以用方括号变成更大的“串” 如:s=s, world,得到, s =hello world 用eval和feval函数将字符变量转换为宏功能。 e
18、val(t)和feval(t)就是运行包含在t 中的内容。,例: n=5; t=1/(i+j-1); a=zeros(n); for i=1:n for j=1:n a(i,j)=eval(t); end end a,例: fun=sin;cos;log; k=input(choose function number:); x=input(enter value:); feval(fun(k,:),x),七、函数调用及变量传递,一个程序可以由若干个函数组成,并通过函数调用来实现控制转移和相互之间的数据传递。 (1)函数调用 在Matlab中函数调用的常用形式是: 输出参数1,输出参数2,=函数
19、名(输入参数1,输入参数2,) 注意:函数调用时各参数出现的顺序,应该与函数定义时的顺序一样,否则出错,例:给定两个实数a、b,一个正整数n,给出k=1,n时的所有和,(1)建立一个函数文件pow.m function out1,out2=pow(a,b,n); out1=(a+b)n; out2=(a-b)n; (2)建立调用上述函数文件的命令文件example.m a=input(please input a=:); b=input(please input b=:); for k=1:10 add_pow(k),sub_pow(k)=pow(a,b,k); end;,例:利用递归调用形式
20、计算n的阶乘。 (1)编写递归调用函数文件factor.m function f=factor(n) if n=1 f=1; return; else f=n*factor(n-1); return; end (2)运行函数文件 factor(4),(2)参数的传递,Matlab在函数调用上有一个与众不同的地方:函数所传递的参数具有可调性,凭借这种特性,一个函数可以完成多种功能。 传递参数数目的可调性来源于如下2个永久变量。 nargin 函数体内的nargin 给出调用该函数时的输入参数数目。 nargout 函数体内的nargout 给出调用该函数时的输出参数数目。,function x0,y0 = myplot(fname,lims,npts,angl,subdiv) % MYPLOT Plot a function. % MYPLOT(fname,lims,npts,angl,subdiv) % The first two input arguments are % required; the other three have default values. . if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业培训视频课件下载
- Photoshop平面设计基础 课件 任务2.4 制作风景图片
- 办理出国考察代办手续服务合同
- 药用辅料运输方案
- 城堡修缮方案
- 财务尽职调查与风险评估综合服务协议
- 东南亚家居品牌国内加盟授权协议
- 娱乐场所安保人员招聘合同样本
- 市政规划应急方案
- 党课知识教学课件
- 湖北省两校2025年物理高一下期末综合测试试题含解析
- 热射病病例查房汇报
- 酒店卫生管理自查报告和整改措施
- 养猪学培训课件
- 安全教育培训:实现安全文明施工
- 2025至2030分布式能源行业市场深度调研及发展规划及有效策略与实施路径评估报告
- 班主任常规工作培训课件
- 2025年云南普洱市墨江天下一双文旅体育集团有限公司招聘笔试参考题库附带答案详解
- GB/T 28731-2012固体生物质燃料工业分析方法
- GB∕T 1001.1-2021 标称电压高于1000V的架空线路绝缘子 第1部分:交流系统用瓷或玻璃绝缘子元件 定义、试验方法和判定准则
- DB11_T 1832.9-2022 建筑工程施工工艺规程 第9部分_屋面工程
评论
0/150
提交评论