资源预览内容
第1页 / 共46页
第2页 / 共46页
第3页 / 共46页
第4页 / 共46页
第5页 / 共46页
第6页 / 共46页
第7页 / 共46页
第8页 / 共46页
第9页 / 共46页
第10页 / 共46页
亲,该文档总共46页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第6章 M文件和函数句柄 matlab语言称为第四代语言称为第四代编程语言,程序简洁、可读性编程语言,程序简洁、可读性很强而且调试十分容易。很强而且调试十分容易。 进行程序设计的进行程序设计的m文件是文件是matlab重要组成部分。重要组成部分。 本章内容 1 matlab控制流 2 脚本文件和函数文件 3 函数类别 4 函数句柄6.1 MATLAB控制流控制流 (1) 顺序结构顺序结构 依次顺序执行程序的各条语句依次顺序执行程序的各条语句(2) 分支结构分支结构根据一定条件来执行各条语句。根据一定条件来执行各条语句。 if else end条件控制语句有条件控制语句有3种形式种形式 单分支单分支 、双分支、多分支、双分支、多分支 switch case otherwise end结构结构 仅执行满足条件的分支仅执行满足条件的分支 (3) 循环结构循环结构 被重复执行的一组语句。被重复执行的一组语句。 循环语句主要有:循环语句主要有: for end while end分支控制有分支控制有3种形式种形式多分支多分支 if 表达式表达式1 语句语句1 elseif 表达式表达式2 语句语句2 elseif 表达式表达式3 语句语句3 else 语句语句n end6.1 MATLAB控制流控制流 6.1.1 if else end条件控制条件控制 单分支单分支 if 表达式表达式 执行语句执行语句 end 双双分支分支 if 表达式表达式 语句语句1 else 语句语句2 end 在在条件表达式条件表达式中,通常用中,通常用 关系操作符关系操作符: , ,=, = =, = 逻辑操作符逻辑操作符: &,| , 逻辑函数逻辑函数:isequal 若是相等则为真若是相等则为真 isempty 若是空矩阵则为真若是空矩阵则为真 isstr 若是字符串则为真若是字符串则为真function function y=y=abcabc(x(x) )% function calculate of y% function calculate of yn=n=length(xlength(x););for for k=1:nk=1:n if if x(kx(k)-1)=1)=1 y(ky(k)=exp(1-x(k);)=exp(1-x(k); else else y(ky(k)=x(k)3;)=x(k)3; end endendend例例6.1-1:编写:编写m函数,函数,对于任意一组输入对于任意一组输入x值,值,计算函数值计算函数值 x (x-1)y = x3 (-1xS,N=exm060104(0.0001) S = 1.9859, N = 141function S,N=exm060104(epsilon)k=0;s=0;d=inf;S=0;while depsilon k=k+1; s=s+k; %sum(1:k) d=1/s; S=S+d;endN=k;符号法验证结果符号法验证结果:N=141;SN=vpa(symsum(1/symsum(k,1,n),n,1,N) %N项项(141项项)和和 SN=1.9859154929577464788732394366197syms k n NSINF=limit(symsum(1/symsum(k,1,n),n,1,N),N,inf) SINF=2【例例6.1-5】创建创建n阶魔方矩阵,限定条件是阶魔方矩阵,限定条件是n为能被为能被4整除整除的偶数。的偶数。(1)所谓魔方矩阵()所谓魔方矩阵(Magic matrix),是指那矩阵由),是指那矩阵由1到到n2的正整数按照一定规则排列而成,并且每列、每行、的正整数按照一定规则排列而成,并且每列、每行、每条对角线元素的和都等于每条对角线元素的和都等于n(n2+1)/2 。就生成规则而。就生成规则而言,魔方矩阵可分成三类:一,言,魔方矩阵可分成三类:一,n为奇数;二,为奇数;二,n为不为不能被能被4整除的偶数;三,整除的偶数;三,n为能被为能被4整除的偶数。整除的偶数。clear;clc;while 1n=input(请输入一个能被请输入一个能被4整除的正整数!整除的正整数! n = ); if mod(n,4)=0 break endendG=logical(eye(4,4)+rot90(eye(4,4); m=n/4;K=repmat(G,m,m); N=n2;A=reshape(1:N,n,n); A(K)=N-A(K)+1s0=round(n*(n*n+1)/2);disp(int2str(n), 阶魔方矩阵的标称和是阶魔方矩阵的标称和是 ,int2str(s0)Ns0=round(2*(n+1);B=A;SC=sum(A); SR=sum(B);Sd=sum(diag(A); Sdi=sum(diag(B); LS=SC,SR,Sd,Sdi=s0;NS=round(sum(LS);if NS=Ns0disp(经验证,经验证,A是魔方矩阵。是魔方矩阵。)elsedisp(经验证,经验证,A不是魔方矩阵。不是魔方矩阵。)end 12 12 阶魔方矩阵的标称和是阶魔方矩阵的标称和是 870870经验证,经验证,A A是魔方矩阵。是魔方矩阵。 6.1.3 控制控制程序流的其他常用指令程序流的其他常用指令见表见表6.1-4inputkeyboardbreakcontinuepause(n)return控制程序程序流的其他常用指令控制程序程序流的其他常用指令1) v=input(msg) v=input(msg, s )该指令执行时该指令执行时,控制权交给键盘控制权交给键盘,待输入结束待输入结束,按按Enter键键,控制权交换控制权交换matlab, msg是提示用的字符串是提示用的字符串,告诉用户告诉用户输入什么输入什么.第一种格式用于键入数值第一种格式用于键入数值,字符串等数据字符串等数据,最后最后v是一个是一个数值数值(包括数组包括数组)或者一个字符串或者一个字符串第二种格式第二种格式,不管键入什么不管键入什么,总以字符串形式赋给变量总以字符串形式赋给变量v。2) keyboard从从M文件中激活键盘文件中激活键盘,遇到该命令时,将控制权交遇到该命令时,将控制权交给键盘,用户可以从键盘输入各种给键盘,用户可以从键盘输入各种matlab指令,指令,仅当用户输入仅当用户输入return指令后,控制权才交还给程指令后,控制权才交还给程序。与序。与input指令的区别是:该指令允许输入任指令的区别是:该指令允许输入任意多个意多个matlab指令,指令, 而而input只能输入赋给变量只能输入赋给变量的值。该指令在调试的值。该指令在调试M文件时非常有用。文件时非常有用。3) continue跳过位于其后的循环中的其他指令跳过位于其后的循环中的其他指令,执行循环的下一个迭代执行循环的下一个迭代例例 更改数组中的值更改数组中的值a=ones(1,12);count=0;s=0;for k=1:12 if rem(k,3)=0 continue else s=s+k; end count = count = countcount + 1; + 1; endcount = 8 break4) break终止终止while,for循环循环,也可以在也可以在if-end, switch-case, try-catch中导致中断中导致中断5) pause, pause(n)第一种格式使程序暂停执行第一种格式使程序暂停执行,等待用户按任意键继续等待用户按任意键继续,第二种格第二种格式使程序暂停式使程序暂停n秒后秒后,再继续执行再继续执行6) return结束结束return指令所在函数的执行指令所在函数的执行,把控制转至主调函数或指令把控制转至主调函数或指令窗窗.否则否则,只有整个被调函数执行完毕才转出只有整个被调函数执行完毕才转出6.2 脚本脚本文件文件 和函数文件和函数文件脚本脚本文件文件 简单的简单的m文件文件脚本脚本文件实际上是一串指令的集合,与在命令窗口文件实际上是一串指令的集合,与在命令窗口逐行执行文件中的所有指令,其结果是一样的。逐行执行文件中的所有指令,其结果是一样的。没没有输入输出参数有输入输出参数。运行产生的所有变量驻留在基本工作空间。运行产生的所有变量驻留在基本工作空间。6.2.1 脚本脚本文件文件m文件的语法类似于文件的语法类似于c语言,但又有其自身特点。它语言,但又有其自身特点。它只是一个简单的只是一个简单的ASCII码码文本文件,执行程序时逐行文本文件,执行程序时逐行解释运行程序。解释运行程序。 m文件有两类文件有两类独立的独立的m文件文件 称称脚本文件脚本文件 可调用可调用m文件文件 称称函数文件函数文件6.2.2 M函数文件函数文件 需要输入变量,返回输出变量需要输入变量,返回输出变量函数函数m文件的格式:文件的格式: function 返回变量返回变量=函数名(输入变量)函数名(输入变量) %注释说明语句段注释说明语句段 程序语句段程序语句段特定规则:特定规则:1.函数函数m文件第一行必须以单词文件第一行必须以单词function作为引导词,作为引导词,必须遵循如下形式:必须遵循如下形式: function =()m文件的文件的文件名文件名最好最好是是 .m。程序中的变量均为局部变量,不保存在工作空间中。程序中的变量均为局部变量,不保存在工作空间中。 其变量只在函数运行期间有效。其变量只在函数运行期间有效。6.2.3 局部变量和全局变量局部变量和全局变量局部局部(local)变量变量它存在于函数空间内部的中间变量,产生于该函数它存在于函数空间内部的中间变量,产生于该函数的运行过程中,其影响范围也仅限于该函数本身。的运行过程中,其影响范围也仅限于该函数本身。全局全局(global)变量变量通过通过global指令定义变量,指令定义变量,Matlab也允许几个不同也允许几个不同的函数空间以及基本工作空间共享同一个变量。这的函数空间以及基本工作空间共享同一个变量。这种被共享的变量称为全局变量。每个希望共享全局种被共享的变量称为全局变量。每个希望共享全局变量的函数或变量的函数或Matlab基本工作空间,必须逐个用基本工作空间,必须逐个用 global对具体变量加以专门定义。没有采用对具体变量加以专门定义。没有采用global定定义的函数或基本工作空间,将无权享用全局变量。义的函数或基本工作空间,将无权享用全局变量。 关于全局变量的说明关于全局变量的说明如果某个函数的运作使全局变量的内容发生了变化,如果某个函数的运作使全局变量的内容发生了变化,那么其他函数空间以及基本工作空间中的同名变量那么其他函数空间以及基本工作空间中的同名变量也就随之变化。也就随之变化。除非与全局变量联系的所有工作空间都被删除,否则除非与全局变量联系的所有工作空间都被删除,否则全局变量依然存在。全局变量依然存在。对全局变量的定义必须在该变量被使用之前进行。建对全局变量的定义必须在该变量被使用之前进行。建议把全局变量的定义放在函数体的首行位置。议把全局变量的定义放在函数体的首行位置。虽然虽然Matlab对全局变量的名字没有任何特别的限制,对全局变量的名字没有任何特别的限制,但是为了提高但是为了提高 M文件的可读性,建议选用大写字符文件的可读性,建议选用大写字符命名全局变量。命名全局变量。由于全局变量损害函数的封装性,因此不提倡使用全由于全局变量损害函数的封装性,因此不提倡使用全局变量。局变量。 6.2.4 函数文件一般结构函数文件一般结构: 举例举例vdp1,ode451.函数申明行函数申明行 :位于函数文件的首行,以关键字位于函数文件的首行,以关键字 function开头,函数名以及函数的输入输出参量都在开头,函数名以及函数的输入输出参量都在这一行定义。函数名和文件名必须相同。这一行定义。函数名和文件名必须相同。2.H1行:行:紧随函数申明行之后以紧随函数申明行之
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号