1、第五节Matlab编程5.1关系运算 5.1.1 比较运算 5.1.2逻辑运算5.2控制流 5.2.1 for 循环 5.2.2 while 循环 5.2.3 if和break语句5.3 M文件、命令文件及函数文件 5.3.1 M文件 5.3.3函数文件 5.3.2命令文件5.4 字符串、输入及输出 5.4.1 echo、input、pause、keyboard 5.4.2串和宏串 5.4.3外部程序 5.4.4输入输出数据5.1关系运算5.1.1 比较运算比较两个同阶矩阵有下面六种相关操作符:相关操作符小于大于=大于等于=等于=不等于表5.1.1.1相关操作符比较两个元素的大小,结果是“1”
2、表明为真,结果是“0”表明为假例如2+2=4结果是“0”,表明为假例如一个6阶魔术方阵,矩阵元素计算满足各种条件:A=magic(6)ans = 35 1 6 26 19 24 3 32 7 21 23 25 31 9 2 22 27 20 8 28 33 17 10 15 30 5 34 12 14 16 4 36 29 13 18 11阶数为n的魔术方阵,即nn矩阵,是由1n2的整数组成(n=6)仔细观察这个矩阵,我们会发现任何行和、任何列和都相等另外,每个33子行列式的对角线元素和,都可被3整除为了显示这一特性,键入:p=(rem(A,3)=0)p = 0 0 1 0 0 1 1 0 0
3、 1 0 0 0 1 0 0 1 0 0 0 1 0 0 1 1 0 0 1 0 0 0 1 0 0 1 0为了再仔细地观察这个模式,可以用format+格式画出矩阵的压缩格式此格式用“+”代表正元素,“-”代表负元素,空格代表0format +p = + + + + + + + + + +find 函数在关系运算中很有用,它可以在0-1矩阵中找非零元素的下标若y是一个向量,例如:y=1 3 2 4 3.5 2.9,则find(y3.0),将指出y的分量在哪些位置上小于3.0ans = 1 3 6即:向量y的第1、3、6位置上的元素小于3.0当输入x=NaN时结果为NaN,因为按照IEEE算法
4、规定任何具有NaN的操作,结果都是NaN调试NaN很有用,例如测试x,输入isnan(x)函数,如果x元素是不定值则得1,否则得0isfinite(x)更有用,如-x时则得15.1.2逻辑运算&与|或非表5.1.2.1逻辑运算符“”和“|”操作符可比较两个标量或两个同阶矩阵对于矩阵来说必须符合规则,如果A和B都是0-1矩阵,则AB或A|B也都是0-1矩阵,这个0-1矩阵的元素是A和B对应元素之间逻辑运算的结果,逻辑操作符认定任何非零元素都为真,给出“1”,任何零元素都为假,给出“0”非(或逻辑非)是一元操作符,即A:当A是非零时结果为“0”;当A为“0”时,结果为“1”因此下列两种表示:p |
5、 (p) 结果为1p (p) 结果为0any和all函数在连接操作时很有用,设x是0-1向量,如果x中任意有一元素非零时,any(x)返回“1”,否则返回“0”;all(x)函数当x的所有元素非零时,返回“1”,否则也返回“0”这些函数在if语句中经常被用到如:if all(A 0,F = A*F/N;E = E + F;N = N + 1;end5.2.3 if和break语句下面介绍if语句的二个例子(1) 一个计算如何被分成三个部分,用符号校验:if n0A=negative(n)elseif mod(n,2)=0A=even(n)elseA=odd(n)end其中的三个函数negati
6、ve(n)、even(n)、odd(n)是自编的输出函数参见下面的函数文件(2) 这个例子涉及数论中一个很有趣的问题,取任何的正整数,如果是偶数,用2除;如果是奇数,用3乘,并加上1,反复这个过程,直到你的整数成为1这个极有趣不可解的问题是:有使这个过程不中止的整数吗?%classic 3n+1problem from number theorywhile 1n=input(Enter n, negative quits: );if n1 if rem(n,2) = 0 % 是连续的2个等号 n=n/2 else n=3*n+1 end; endend这个过程能永远进行吗? 程序的说明:(1)
7、本程序用到了if语句与while语句,过程比较复杂;(2)使用input函数,可使程序在执行过程中,从键盘输入一个数(矩阵);(3)break语句提供了程序跳出死循环的途径5.3 M文件、命令文件及函数文件5.3.1 M文件Matlab通常使用命令驱动方式,当单行命令输入时,Matlab立即处理并显示结果,同时将运行说明或命令存入文件Matlab语句的磁盘文件称作M文件,因为这些文件名的未尾是.M形式,例如一个文件名为bessel.m,提供bessel函数语句一个M文件包含一系列的Matlab语句,一个M文件可以循环地调用它自己M文件有两种类型:第一类型的M文件称为命令文件,它是一系列命令、语
8、句的简单组合第二类型的M文件称为函数文件,它提供了Matlab的外部函数用户为解决一个特定问题而编写的大量的外部函数可放在Matlab工具箱中,这样的一组外部函数形成一个专用的软件包这两种形式的M文件,无论是命令文件,还是函数文件,都是普通的ASCII文本文件,可选择编辑或字处理文件来建立5.3.2命令文件当一个命令文件被调用时,Matlab运行文件中出现的命令而不是交互地等待键盘输入,命令文件的语句在工作空间中运算全局数据,对于进行分析解决问题及做设计中所需的一长串繁杂的命令和解释是很有用的例如:一个自编的命令文件fibo.m,用于计算Fibonnaci数列% An M-file to ca
9、lculate Fibonnaci numbersf=1, 1 ; i = 1;while f(i)+f(i+1)tol);这个变量说明利用永久变量nargin确定输入变量的个数,变量nargout虽然这里没有使用,但它包含有输出变量的个数一些有用的说明:当M函数文件第一次在Matlab运行时,它被编译并放入内存,以后使用时不用重新编译即可得到what命令:显示磁盘当前目录中的M文件,dir命令:列出所有文件一般而言,输入一个名字到Matlab,例如键入whoopie命令,Matlab用以下步骤解释:(1) 看whoopie是否为变量(2) 检验whoopie是否为在线函数(3) 检验whoo
10、pie文件的当前目录(4) 将whoopie看成Matlab的PATH中的一个文件,在Matlab PATH目录中搜索如果whoopie存在,Matlab首先将其作为变量而不是作为函数5.4 字符串、输入及输出5.4.1 echo、input、pause、keyboard一般来说,当一个M文件运行时,文件的命令不在屏幕上显示,而echo命令则使M文件运行时,命令在屏幕上显示,这对于调试、演示相当有用input功能:输入Input(How many apples)给用户一个提示串,等待,然后显示用户通过键盘输入的大量表达式可以用input命令建立驱动M文件的菜单与input功能相同,但功能更强的
11、keyboard命令将计算机作为一个命令文件来调用,放入M文件中,此特性对调试或正在运行期间修改变量很有用pause命令:使用户暂停运行一个程序,当再按任一键时恢复执行,pause(n)等待n秒钟后再继续执行5.4.2串和宏串字符串用单个引号输入到Matlab中,例如:s=Hello结果显示为:s =Hello字符存在向量中,每个元素就是一个字符,如:size(s)ans =1 5表明S为一个15的矩阵,有五个元素字符以ASCII值存入,abs函数或double函数将显示以下值(即Hello的ASCII值)abs(s)ans = 72 101 108 108 111getstr函数,使向量作为
12、字符显示,而不显示ASCII值disp可在变量中显示字符sprintf, num2str和int2str可以将数字转换成串字符变量通过括号连成大串例如:s=hello;s=s, worlds =hello worldeval是与字符变量起工作的函数,执行简单字符宏调用eval( t )执行包含在t内的字符如果t是任何Matlab表达式或语句的源字符,则字符串被解释执行例如:t=eye(2), eval(t)结果为:ans=1 00 1又例如,给矩阵元素赋值t=1/(i+j-1);for i=1:nfor j=1:n a( i, j)=eval(t);endend这儿有一个例子,介绍如何一起使用
13、eval与load命令,装入十个具有顺序文件名的文件中的数据:fname=mydata;for i = 1:10eval( load , fname, int2str( i )end5.4.3外部程序Matlab与外部独立程序的通讯方式可以是多种多样的,下面介绍其中的一个办法:(1) Matlab中将变量存入磁盘(2) 运行外部程序(读数据文件,进行处理),将结果写到磁盘上(3) 将处理后的文件装回到工作空间中例如:用外部程序gareqn找garfield方程的结果:function y=garfield(a,b,q,r)save gardata a,b,q,r! gareqnload gar
14、data使用FORTRAN或其它语言写gareqn程序,使其可以读gardata.mat,进行处理,将结果存入文件中这个程序可将计算机的“连接码”提供给Matlab,在许多系统中它将新的目标码连接到程序中比物理联接要方便得多5.4.4输入输出数据可使用各种方法将其它程序和外部世界的数据送入Matlab,同样可把Matlab数据输送到外部世界,使你的程序以Matlab使用的文件形式直接计算数据最好的方法取决于多少数据,数据是否可读,什么形式等:(1) 清晰的元素表输入:如果你有少量数据,比如说小于1015个元素,使用方括号输入(2) 使用文本编辑建立命令文件,将数据列为清晰的元素表输入如果数据不
15、是可读形式,又不得不以一种方法键入,可以重复运行M文件,重复修改数据(3) 如果数据以ASCII形式存贮,并有固定长度,行尾有回车符,各数间有空格的文件称为flat file(ASCII的flat file可由普通文本编辑来编辑),flat file通过load命令直接读进Matlab,结果存入名为文件名的变量中去(4) 将数据文件译成Matlab文件形式,使用load命令,translate程序由Matlab中的应用程序库支持,translate程序将ASCII文件、二进制文件、FORTRAN非格式文件和DIF文件转换为Matlab使用的特定的MAT文件,当磁盘文件中存有大量数据时,这个方法输入最好Matlab数据输出到外部世界的方法:(1) 小矩阵时:使用diary命令建立日志文件,在文件中列出变量,用文本编辑处理日志文件,日志的输出包括运行中的Matlab命令(2) 使用save命令存入变量,退出Matlab,用translate程序将MAT文件转换成任一种其它文件形式 上一页 回目录 下一页