




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第 4 章 MatLab 的程序设计MatLab 是一个工具、开发平台,同时它也是一门编程语言。与在命令窗口用交 互的方式工作相比,通过程序运行来解决实际问题,其效率更高,因此,凡是复杂 的、大型的应用都是以程序的方式执行。相对其它高级语言, MatLab 更简单、编程 的效率更高、调试过程也更容易。MatLab中的程序文件是以m为后缀,所以通常将MatLab的程序文件称为m文件。 MatLab提供了两种形式的m文件,即:脚本(Script )式m文件(就简称m文件)、 函数型m文件。在MatLab中已经嵌入了一个功能强大的集成开发环境一一m文件编 辑器,用它来进行程序的编辑、修改、调试、运行
2、等,完成应用开发工作。4.1 MatLab 程序设计基础通过前面内容的学习,大家对 MatLab已经有了一个初步的认识和印象,到目前 为止,我们都是在“命令”窗口中,以交互的方式运行,完成我们的工作。实际上 简单的m文件,就是一个批处理程序,它是若干条命令的集合。例:4.1.1 M 文件规则和属性函数M文件必须遵循一些特定的规则。除此之外,它们有许多的重要属性,这 其中包括:1. 函数名和文件名必须相同 。例如,函数 fliplr 存储在名为 fliplr.m 文件 中。2. MATLAB头一次执行一函数个 M文件时,它打开相应的文本文件并将命令编辑成存储器的内部表示, 以加速执行以后所有的调
3、用。 如果函数包含了对其它函数 M 文件的引用,它们也同样被编译到存储器。普通的脚本M文件不被编译,即使它们是从函数M文件内调用;打开脚本 M文件,调用一次就逐行进行注释。3. 在函数M文件中,到第一个非注释行为止的注释行是帮助文本。当需要帮 助时,返回该文本。例如, ? help fliplr 返回上述前八行注释。4. 第一行帮助行,名为H1行,是由lookfor命令搜索的行。5. 函数可以有零个或更多个输入参量。函数可以有零个或更多个输出参量。6. 函数可以按少于函数 M文件中所规定的输入和输出变量进行调用,但不能用多于函数M文件中所规定的输入和输出变量数目。如果输入和输出变量数目多于函数
4、M文件中function 语句一开始所规定的数目,则调用时自动返回一个错误。相对于函数m文件,脚本式m文件就简单多了,它没有严格的格式要求,只要 将有关的命令或函数一一敲入即可,但是还是有几个问题需要注意:1. m文件的名称不得与MatLab的内部函数同名、第一个字符不得为数字(这点 与变量的命名规则相同);2. 最好在文件的头部加上注释,对该m文件的作用、功能作一个简要说明,而 在一些重要命令行后也加上注释行,以方便使用者阅读、查找;3. 要特别注意m文件的保存路径或位置,如果不是保存在MatLab默认的路径下,可以使用addpath函数来设置、添加路径,否则,m文件不能运行。脚本式m文件与
5、函数m文件还有一个重要区别:脚本式m文件中的变量均为全 局变量,而函数m文件中的变量则是局部变量。这可以从这两种程序文件运行后在 Workspace中留下痕迹看出。当然,在函数m文件中也可以专门将某些变量定义为全 局变量(关键字是:global )。不过,在使用全局变量(函数 m文件中)时应特别注意: .全局变量需要函数体的变量赋值语句 之前定义或说明; .全局变量名最好是大写,而且要尽量长,能反映它本身的含义; .实际编程时,全局变量也要尽可能少用,因为一旦它在一个地方被改变,那么其它包括该变量的函数中都得改变,有时可能会出现意想不到情况。4.1.2 M文件的组成函数M文件实例:fun ct
6、i on f=fact(n)%函数定义行%Compute a factorial value%H1行%FACT( N)return the factorial of N%usually denoted by N%帮助文本%Put simply , FACT (N)is PROD( 1:N )% 注释f=prod( 1:N );%函数体一个完整的函数M文件通常包括: . 函数定义行:定义函数名以及输入、输出变量的数目和顺序; . H1 行:对该函数进行概括性的描述(可用 help 和 Lookfor 命令调出此行); .帮助文本:这是比H1行更详细的帮助信息,使用help命令时与H1行一起显示;
7、 .函数体:这是函数M文件的主要部分,程序的功能都在此部分实现; .注释:对程序行的意义进行解释(与 H1行一样都是用开头)。有的函数M文件还包含return语句!4.1.3 M 文件编辑器介绍1. m 文件编辑器的启动在命令窗口中敲入: edit点击工具栏中的新建图标从菜单 file/new/M-file 中启动2. m 文件编辑器的界面菜单栏工具栏编辑窗口3. m 文件的运行在m文件编辑器内在命令窗口中运行在命令窗口直接输入 m文件名,回车即可,但函数 m文件通常还必须带参数才能运行,也可以利用feval函数来运行函数m文件,其格式如下:feval(f un cti onn ame, ar
8、gl, arg2, .)对于脚本式m文件,还可以用run函数在命令窗口中运行存在的 m文件。格式:run m文件名(不必带文件的后缀)4.1.4对函数M文件的调用凡是以函数m文件形式保存的程序文件,均可以被其它函数m文件或脚本m文件所调用。例:先定义一个函数m文件:%计算阶乘fun cti on y=jiech( n)y=i;for i=1: ny=y*i;end编写m文件实现对上述函数m文件的调用:fun cti on z=dy (n)z=log( jiech(n);4.1.5数据类型与结构MatLab的数据类型前面已经介绍,下面是它们之间的关系图:(Amy)宇稱型数值型虫元数姐塔构II|用
9、户对象孜韬度存隅型鷄旳稀疏逍嶠说兰冲1兰MatLab中结构(教材中称构架)的概念和 C语言中的类似,它也包含一个或多个域(数据容器),每个域可以包含任何类型的数据(这一点与单元数组又相似) 且相互独立。下面通过实例来说明如何建立并访问结构用结构建立学生的数据记录。 例1:在命令窗口直接创建(或用 m文件编辑器)创建。 student.num=20070135;= 李四 ; student.age=20;student.weight=67;student.height=1.68; student.test=90 85 76 63 88 54 79;从这个例子可以看出 结构
10、建立的方法:直接建立结构和各个域,同时给各域赋 值(也可以不赋值),结构和域之间用点“ . ”连接。 用关键字“ struct ”创建,格式如下:s = struct(field1, values1, field2, values2, .) 例 2: 用关键字“ struct ”创建。student=struct(num,20070135,name,zhangsan,weight,1.68,height,75,test,98 87 65 95 78) 结构的操作 结构域的访问 结构域的添加、修改直接添加或用函数 setfield()添加;直接修改或用函数 setfield()修改。 结构域的删
11、除用函数 rmfield() 删除某个域。格式: s=rmfield(s,fieldname)4.2 MatLab 程序的控制 程序的流程控制是高级语言中必不可少、也是非常重要的部分,要编写出高质 量的程序,实现对复杂系统的控制、仿真,这一点也是必须掌握的。MatLab提供了多种控制结构,包括:顺序结构、选择(分支)结构以及循环结构, 每种结构都有各自的控制机制,利用它们及其它们的组合可以实行功能强大的、复杂的应用。4.2.1 顺序结构 顺序结构最简单,它是一种最基础的程序结构,也是最遵循逻辑思路的程序代 码结构,批处理文件就是典型的顺序语句文件。这种语句不需要任何特殊的流控制, 按照语句的排
12、列顺序,一条一条的执行,直至结束。例:4.2.2 选择(或分支)结构 如果程序中需要根据一定条件来执行不同的操作时,可以使用条件语句来构成 选择或分支结构。在 MatLab 中可利用 if 语句来实现这种结构。 if 语句的结构通常 有以下三种形式:1. 单分支结构: 这种分支结构最简单,格式为: if 表达式语句end 它只有一个判断语句,当表达式为真时,就执行语句,否则就不执行。例:function f=ifone(x)if x=0fprintf(%f is a Positive number.n,x);end2. 双分支结构:此时,采用 if-else-end 结构,语法是:if 表达式
13、语句 1else语句 2end即:表达式为真,系统执行语句 1,否则将转入语句 2 执行 例:将上面的例子扩充 function f=ifone(x)if x=0fprintf(%f is a positive number.n,x); elsefprintf(%f is a negative number.n,x); end3. 多分支结构:仍采用 if-else-end结构,但语法上略有不同,形式如下:if 表达式 1语句 1 %elseif 表达式 2 语句 2%elseif 表达式 3 语句 3%else语句 n %end例:编写一个成绩打印程序表达式 1 为真执行语句 1表达式 2
14、为真执行语句 2表达式 3 为真执行语句 3 所有表达式为假执行语句 nfunction f=chengji(x)if x=90fprintf(%d分,成绩为优 n,x)elseif x=80fprintf(%d分,成绩为良 n,x)elseif x=70fprintf(%d分,成绩为中 n,x)elseif x=60fprintf(%d分,成绩为及格 n,x)elsefprintf(%d分,成绩为不及格 n,x)end4.2.3 开关语句( Switch 分支结构) 开关语句实际上也是分支结构的一种,是一种多选择的分支语句,作用与上面 介绍的多分支结构相似,这是 MatLab6.0 以上版本
15、新增加的功能。该结构的一般调用格式如下:Switch expressionCase value1StatementsCase value2StatementsOtherwiseStatementsend例: 采用 switch 结构的一个简单应用%提示用户输入数据input_num=input(Enter a number:);%根据情况判断数值大小,显示数据信息switch input_numcase -1disp(negative one);case 0disp(zero);case 1disp(positive one);otherwisedisp(other value); % 如果不
16、是上面数据,显示“其它数据”end4.2.4 try-catch 结构try-catch 结构(或模块)为用户提供了一种错误捕捉机制,利用该模块,一旦 MatLab的编译系统发现错误,就将其捕捉,用户可以控制MatLab去对出现的错误进 行相应处理。它的调用格式如下:try语句 1catch语句 2end一般来说,语句 1 中的所有命令都要执行,如果在执行语句 1 时,没有出现错 误,那么在执行语句1之后,就直接跳到end后;但是,如果在执行语句1时,出 现了错误,程序立刻转到 catch 模块中, 去执行语句 2,并可通过调用 lasterr 函数 查询出错的原因。例:见教材中P70例4-4
17、。4.2.5循环结构很多程序都可能会出现一些反复运行的部分,前面介绍的这些结构就很难实现 了。同其它高级语言一样,MatLab也提供了循环语句。在循环语句中,被重复执行 的部分称为循环体,控制循环语句是否继续的称为循环条件。在MatLab中有两种循环结构,即所谓的for循环和while循环。1. for循环for循环语句有如下特点:它的循环判断条件通常是对循环次数的判断,即它的循环次数是预先设定好 的; for循环语句可以嵌套使用。不仅可以对for本身嵌套,还可以对其它的结构形式进行嵌套使用。for循环的语法:for i= 表达式语句1,语句n ;end例:求n个数的平方。function x
18、=pfh( n)for i=1: nx(i)=iA2;end2. while 循环与for循环不同,while循环的判断控制可以是逻辑判断语句,它的循环次数可 以是一个不定数,因此比for循环有更广泛的用途while循环的格式:while 表达式语句end在这个循环中只要表达式值不为false,程序就一直运行下去,语句被反复执行例1:求几个数的阶乘给m和n赋初值自增1fun ctio n m=jiech(x) m=1; n=1;%while n=xm=m* n;n=n+1;%nend例 2: Fib on acci 数组的元素满足 Fibo nacci 规则:ak 2 ak ak 1 ,(k 1,2,);且a1a2 1。现要求该数组中第一个大于10000的元素。a(1)=1;a (2)=1;i=2;while a(i) 1/(1+sin(y)A2)compose(f,g,t) - 1/(1+sin(t)A2) compose(h,g,x,z) - sin(z)At compose(h,g,t,z) - xAsin(z) compose(h,p,x,y,z) - exp(-z/u)At compose(h,p,t,u,z) - xAexp(-y/z)4.4.3 符号微积分 在数学分析中,微积分是一个非常重要的内容,整
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江西省抚州市乐安县重点达标名校2025年初三阶段性测试(五)数学试题试卷含解析
- 上海杉达学院《国际经济学》2023-2024学年第二学期期末试卷
- 2025年网络营销专业技能考试试题及答案
- 2025年信息系统项目管理师资格考试试题及答案
- 台州市临海市2025年数学三下期末综合测试模拟试题含解析
- 上海民远职业技术学院《唐诗选读》2023-2024学年第二学期期末试卷
- 未来医疗行业发展趋势与相关护理考试试题及答案
- 泰山护理职业学院《水利工程专业导论》2023-2024学年第二学期期末试卷
- 吉林省长春市朝阳区2024-2025学年联考第一次诊断性考试化学试题含解析
- 江苏省常州市武进区礼嘉中学2024-2025学年高三4月高考二模英语试题含解析
- 重症新生儿护理课件
- 初中教科研课题:《提高初中学生地理读图能力》课题研究方案
- 家庭与生活环境职业生涯规划
- 现场应急通信指挥系统建设方案
- 旁站记录表(桩基)
- 生命伦理学期末测试习题与答案
- 声波吹灰系统安装、调试、操作说明书
- 英国电影概况
- 幕墙工程施工讲解
- 镜头盖注塑模具
- 计算机应用技术毕业论文-计算机应用技术论文5000字
评论
0/150
提交评论