【matlab教学PPT】第4讲MATLAB程序设计

上传人:新** 文档编号:578176715 上传时间:2024-08-23 格式:PPT 页数:49 大小:344.50KB
返回 下载 相关 举报
【matlab教学PPT】第4讲MATLAB程序设计_第1页
第1页 / 共49页
【matlab教学PPT】第4讲MATLAB程序设计_第2页
第2页 / 共49页
【matlab教学PPT】第4讲MATLAB程序设计_第3页
第3页 / 共49页
【matlab教学PPT】第4讲MATLAB程序设计_第4页
第4页 / 共49页
【matlab教学PPT】第4讲MATLAB程序设计_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《【matlab教学PPT】第4讲MATLAB程序设计》由会员分享,可在线阅读,更多相关《【matlab教学PPT】第4讲MATLAB程序设计(49页珍藏版)》请在金锄头文库上搜索。

1、第第4讲讲 MATLAB程序设计程序设计第4讲MATLAB程序设计第第4讲讲 MATLAB程序设计程序设计MATLAB除了如前所述的在命令窗口进行的直接交互的指令操作方式外,另外一种更为重要的工作方式就是M文件的编程工作方式。M文件有两种形式,一种是脚本文件,另一种是函数文件。M文件的扩展名为“.m”。M文件可以通过任何纯文本编辑器进行编辑,MATLAB中也有自带的文本编辑器,使用“edit”命令即可开启。M文件简介第第4讲讲 MATLAB程序设计程序设计脚本程序文件以.m格式进行存取,包含一连串的MATLAB指令和必要的注解。需要在工作空间中创建并获取变量,也就是说处理的数据为命令窗口中的数

2、据,没有输入参数,也不会返回参数。程序运行时只需在工作空间中键入其名称即可。第第4讲讲 MATLAB程序设计程序设计M文件和程序调试基本组成结构说明说明清除命令清除命令 %清除workspace中的变量和图形(clear,close)定义变量定义变量 %包括全局变量的声明及参数值的设定逐行执行命令逐行执行命令 %指MATLAB提供的运算指令或工具箱提供的专用命令控制循环控制循环%包含for,ifthen,switch,while等语句逐行执行命令逐行执行命令end绘图命令绘图命令 %将运算结果绘制出来第第4讲讲 MATLAB程序设计程序设计M文件的编辑及工作路径的设置进入MATLAB的Edit

3、or/Debugger窗口来编辑程序在编辑环境中,文字的不同颜色显示表明不同属性 绿色:注解绿色:注解; 黑色:程序主体;黑色:程序主体; 红色:属性值的设定红色:属性值的设定; 蓝色:控制流程蓝色:控制流程。在运行程序之前,必须设置好MATLAB的工作路径。通过cd指令在命令窗口中可以更改、显示当前工作路径。通过路径浏览器(pathbrowser)可以进行设置第第4讲讲 MATLAB程序设计程序设计任何计算机语言,只要利用顺序结构循环结构分支结构就可以完成任何程序功能。在MATLAB中也有这三种基本的程序结构。但值得注意的是,由于MATLAB语言矩阵计算功能十分强大,常常仅使用顺序结构借以矩

4、阵的逻辑运算就可以完成计算任务。程序控制流语句第第4讲讲 MATLAB程序设计程序设计由于循环结构和分支结构在MATLAB语言中的运行速度相对较慢,因此在算法优化的编程中应当尽可能避免使用而代之以矩阵运算,从而提高程序运行速度,简化程序代码,并使得程序代码更加接近于数学表达。当然,采用矩阵编程的编程方法需要读者具有更多的关于线性代数和矩阵数学的知识和思维方式。第第4讲讲 MATLAB程序设计程序设计顺序结构是MATLAB中最常用的程序结构,也是执行效率最高的程序结构。顺序结构的语句是按照书写的前后顺序来执行的。顺序结构第第4讲讲 MATLAB程序设计程序设计循环结构MATLAB用于循环结构的语

5、句有两种:“forend”循环和“whileend”循环。第第4讲讲 MATLAB程序设计程序设计forend语句利用“helpfor”或“docfor”可以获得关于该语句的使用手册。“forend”语句适用于循环次数确定的情况,将循环变量的初值、判别和变化放在循环开头。“forend”语句的调用形式是:for循环语句第第4讲讲 MATLAB程序设计程序设计基本格式for for 循环变量起始值:步长:终止值循环变量起始值:步长:终止值 循环体;循环体; endend步长缺省值为1。对于正数,循环变量的值大于终止值时,循环结束;对于负数,循环变量的值小于终止值时,循环结束。循环结构可以嵌套使用

6、。第第4讲讲 MATLAB程序设计程序设计例如,最简单的forend循环:fork=1:10x(k)=k.2;end第第4讲讲 MATLAB程序设计程序设计事实上,采用矩阵思想也可以获得相同的结果,但编程更加简单明了:k=1:10;x=k.2x=149162536496481100绝大部分循环都可以遵从这样的方法变成向量化(矩阵化)的算法,避免采用循环语句,从而大大提高程序的执行效率。第第4讲讲 MATLAB程序设计程序设计例子:m=3,n=3;fori=1:mforj=1:nH(i,j)=1/(i+j);endendHH=0.50000.33330.25000.33330.25000.200

7、00.25000.20000.1667第第4讲讲 MATLAB程序设计程序设计例 如果用户想由 MATLAB 求出 1+2+.+100 的值,可以作下列的循环:mysum=0; for i=1:1:100mysum=mysum+i; end; mysummysum =5050在 MATLAB 实际编程中, for语句可以简化成 for i=1:100。或更简单地,该语句还可以写成 sum(1:100)。第第4讲讲 MATLAB程序设计程序设计对于循环次数不能预先确定,而是由某个逻辑条件 来 控 制 循 环 次 数 的 情 况 , MATLAB提 供 了“whileend”来实现。和“foren

8、d”语句类似,“whileend”语句也允许嵌套。“whileend”语句的一般形式是:whilev=表达式语句1;语句n;endwhileend语句第第4讲讲 MATLAB程序设计程序设计While循环和for循环的区别在于:while的循环体被执行的次数不是确定的,而for循环体的执行次数是确定的。同样的问题在 while 循环结构下可以表示为 mysum = 0; i=1; while (i=100), mysum=mysum+i; i=i+1; end 第第4讲讲 MATLAB程序设计程序设计例如,求当整数n的阶乘值是一个50位数的第一个数时,n为多少?n=1;%n的初值whilepr

9、od(1:n)1e50n=n+1;endnn=42第第4讲讲 MATLAB程序设计程序设计Break 中止循环中止循环使程序从一个 for or while 循环中退出。在嵌套循环中,break 只能从最里层的循环跳出第第4讲讲 MATLAB程序设计程序设计分支结构第第4讲讲 MATLAB程序设计程序设计逻辑判断及流程控制关系运算符relational operations在处理关系运算时,运算元只有两个值即0和1,关系成立,结果为1,关系不成立时,结果为0假设有:A=12-1-5B=0231小于ABans=0011;A大于ABans=1000;A1ans=0100=小于等于A=大于等于A=B

10、ans=1100= 等于 A=Bans=0100;A=1ans=1000=不等于A=Bans=1011;A=1ans=0111第第4讲讲 MATLAB程序设计程序设计x=2.11.71.61.51.91.81.55.11.81.42.21.61.8;abs(x-mean(x)%mean(x)对求平均ans=Columns1through70.10000.30000.40000.50000.10000.20000.5000Columns8through133.10000.20000.60000.20000.40000.2000abs(x-mean(x)=1.5ans=1111111011111x

11、=x(abs(x-mean(x) Bgreaterelseif A 1e50,break;end%满足条件,则跳出循环endn%显示结果n=42第第4讲讲 MATLAB程序设计程序设计“switch”语句来实现多重分支结构。其用法是:语句来实现多重分支结构。其用法是:switch开关表达式case表达式1语句,语句case表达式1,表达式2,表达式3,语句,语句otherwise语句,语句end第第4讲讲 MATLAB程序设计程序设计switch语句格式:switch 表达式(可以是标量或字符串)表达式(可以是标量或字符串) case 值值1 语句语句1 case 值值2 语句语句2 . ot

12、herwise 语句语句n end 执行方式:表达式的值和哪种情况(case)的值相同,就执行哪种情况中的语句,如果不同,则执行otherwise中的语句。格式中也可以不包括otherwise,这时如果表达式的值与列出的各种情况都不相同,则继续向下执行。第第4讲讲 MATLAB程序设计程序设计注意:注意:switch在在MATLAB和和 C 不同不同与 C 语言的switch 不同,MATLAB的 switch,如果第一个 case 为真,则其他的 case语句不执行,所以不用break 语句第第4讲讲 MATLAB程序设计程序设计switch(rem(n,4)=0)+(rem(n,2)=0)

13、%rem(a,b)是a整除b,求余数,rem(n,4)=0为余数和零的关系运算,若相等则为。case0odd_M=magic(n)case1single_even_M=magic(n)case2double_even_M=magic(n)otherwiseerror(Thisisimpossible)end第第4讲讲 MATLAB程序设计程序设计如果M文件的第一行是以关键字“function”开头的,则就是函数文件。函数文件和脚本文件在内存使用上存在重要的区别,函数文件内部所定义的变量仅仅在该函数文件内部有效,函数返回后这些内部变量将自动被清除,也就是说,函数内部所定义的变量仅在函数内部起作用

14、,是局部变量。函数文件的文件名必须和函数名相同,而且注意切记不要和MATLAB已经定义的系统函数和其它自定义的函数同名。函数文件第第4讲讲 MATLAB程序设计程序设计函数编程的例子,函数的文件名与函数名相同,为stat.m。程序functionmean,stdev=stat(x)n=length(x);%求输入向量x的长度mean=sum(x)/n;%求平均值stdev=sqrt(sum(x-mean).2/n);%求均方根值第第4讲讲 MATLAB程序设计程序设计第第4讲讲 MATLAB程序设计程序设计(1)函数定义行(关键字function)functionout1,out2,.=fil

15、ename(in1,in2,.)第第4讲讲 MATLAB程序设计程序设计(2)第一行帮助行,即H1行以(%)开头,作为lookfor指令搜索的行(3)函数体说明及有关注解以(%)开头,用以说明函数的作用及有关内容。如果不希望显示某段信息,可在它的前面加空行(4)函数体语句函数体内使用的除返回和输入变量这些在function语句中直接引用的变量以外的所有变量都是局部变量,即在该函数返回之后,这些变量会自动在MATLAB的工作空间中清除掉。第第4讲讲 MATLAB程序设计程序设计声明子程序(函数程序)变量1、子程序与主程序之间的数据是通过参数进、子程序与主程序之间的数据是通过参数进行传递的,子程序

16、应用主程序传递来的参行传递的,子程序应用主程序传递来的参数进行计算后,将结果返回主程序。数进行计算后,将结果返回主程序。第第4讲讲 MATLAB程序设计程序设计%主程序主程序exp2_9.ma=input(please input value of a=);b=input(please input value of b=);c=sumhe(a,b)% 在此例中,主程序在此例中,主程序exp2_9.m设定了两个参数设定了两个参数a和和b来调用来调用% 子程序子程序sumhe.m(为一个函数文件为一个函数文件),% 所以执行主程序时,子程序就会调用主程序传递过来的所以执行主程序时,子程序就会调用主

17、程序传递过来的% a和和b值进行计算,再将结果返回主程序。值进行计算,再将结果返回主程序。%子程序子程序sumhe.m%sumhe(a,b) sum the serial of numbers from a tobfunctionresult=sumhe(a,b)result=sum(a:b);第第4讲讲 MATLAB程序设计程序设计局部变量和全局变量 如果一个函数内的变量没有特别声明,那么这个变量只在函数内部使用,即为局部变量。如果两个或多个函数共用一个变量(或者说在子程序中也要用到主程序中的变量,注意不是参数),那么可以用global来将它声明为全局变量。全局变量的使用可以减少参数传递,合

18、理利用全局变量可以提高程序执行的效率。第第4讲讲 MATLAB程序设计程序设计%主程序主程序exp2_10.mglobal a%声明变量声明变量a为全局变量为全局变量x=1:100;a=3;c=prods(x)%调用子程序调用子程序prods.m%子程序子程序prods.mfunction result=prods(x)global a result=a*sum(x);%声明了与主程序一样的全局变量声明了与主程序一样的全局变量a,以便在子程序中可以以便在子程序中可以%使用主程序中定义的变量使用主程序中定义的变量第第4讲讲 MATLAB程序设计程序设计子函数从5.x版开始,MATLAB允许一个M

19、函数文件包含多个函数的代码。第一个出现的函数主函数(Primaryfunction),其函数名与文件名相同其他出现的函数子函数(Subfunction)第第4讲讲 MATLAB程序设计程序设计子函数的性质每个子函数的第一行是自己的函数定义行在M函数内,主函数的位置不可改变,但子函数的排列次序可以随意改变子函数只能被处于同一文件的主函数或其他子函数调用M函数文件中任何指令通过“名字”对函数调用时,子函数的优先级仅次于内部函数同一文件的主函数、子函数的工作空间都是彼此独立的help、lookfor等帮助指令都不能提供关于子函数的任何帮助信息第第4讲讲 MATLAB程序设计程序设计1)“input”

20、指令指令“input”指令提示用户从键盘输入数据、字符串或表达式,并接受该输入。“input”指令的调用格式有两种:user-entry=input(prompt)%输入数据或表达式user-entry=input(prompt,s)%输入字符串数据和文件的输入输出第第4讲讲 MATLAB程序设计程序设计例如:a=input(请输入矩阵或表达式,赋值到a:);%输入数据的例子请输入矩阵或表达式,赋值到a:12;34a=1234第第4讲讲 MATLAB程序设计程序设计a=input(请输入矩阵或表达式,赋值到a:);%输入表达式的例子请输入矩阵或表达式,赋值到a:sin(1)+8a=8.8415

21、s=input(请输入一个字符串:,s);%输入字符串的例子请输入一个字符串:thisisastrings=thisisastring第第4讲讲 MATLAB程序设计程序设计2)“pause”指令指令“pause”指令可以使程序暂停运行,等待用户按任意键继续。“pause”指令主要用于程序调试或显示中间结果。“pause(n)”指令使得程序暂停执行n秒。第第4讲讲 MATLAB程序设计程序设计3)利用文件输入输出数据利用文件输入输出数据指令“save”和“load”用于MATLAB与磁盘的数据交换。“save”指令将MATLAB工作空间的数据存入磁盘;“load”指令则将数据从磁盘送入到MATLAB工作空间。举例说明如下:clear;A=1,2;3,4;b=81;save(c:mymatlabdat.mat,A,b);%将变量A和b保存在文件C:mymatlabdat.mat第第4讲讲 MATLAB程序设计程序设计首先,在编程中要尽量避免采用循环语句。利用向量化语句来代替循环语句可以大大提高程序运行速度。如果不得不采用多重循环,那么内循环的次数应该尽可能多于外循环的次数。其次,在使用大型数组或矩阵之前对其进行初始化,即采用指令“zeros”或“ones”对矩阵定维,这样可以减少MATLAB在内存分配过程中的耗时,大大提高速度。提高程序执行速度的原则

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号