1、MATLAB在编程方面的应用本章主要对matlab在编程方面的应用作一个较详细的介绍,其中涉及了编程必然须注意的变量类型、数据类型、程序控制语句及matlab函数等相关内容。一、 变量、语句1 变量命名规则 必须以字母开头; 可以由字母、数字和下划线混合组成; 字符长度应不大于31个。注意:matlab区分大小写。2 局部变量和全局变量通常,每个函数体内都有自己定义的变量,不能从其他函数和MATLAB工作空间访问这些变量,这些变量即是局部变量。如果要使某个变量在几个函数中和MATLAB函数空间都能使用,可以把它定义为全局变量。全局变量就是用关键字“global”声明的变量。全局变量名尽量大写,
2、并能够反映它本身的含义。如果需要在几个函数中和MATLAB工作空间都能访问一个全局变量,那么必须在每个函数中和MATLAB工作空间内都声明该变量为全局变量为全局的。全局变量需要在函数体的变量赋值语句之前说明,整个函数以及所有对函数的递归调用都可以利用全局变量。注意:实际编程中,应尽量避免使用全局变量,因为全局变量的值一旦在一个地方被改变,那么在其他包括该变量的函数中都将改变,这样由可能会出现不可遇见的情况。如果需要用全局变量,建议全局变量名要长,能反映它本身的含义,并且最好所有字母都大写,并由选择地以首次出现的M文件的名字开头。3 基本语句MATLAB可以认为是一种解释性语言,用户可以在MAT
3、LAB命令窗口键入命令,也可以在编辑器内编写应用程序,这样MATLAB软件对此命令或程序中各条语句进行翻译,然后在MATLAB环境下对它进行处理,最后返回运算结果。MATLAB语言的基本语句结构为:变量名列表表达式其中等号左边的变量名列表为MATLAB语句的返回值,等号右边的是表达式的定义,它可以是MATLAB允许的矩阵运算,也可以是函数调用。等号右边的表达式可以由分号结束,也可以由逗号或回车结束,但它们的含义是不同的,如果用分号结束,则左边的变量的结果将不在屏幕上显示,否则将把结果全部显示出来。MATLAB语言和C语言不同,在调用函数时MATLAB允许一次返回多个结果,这时等号左边是 括起来
4、的变量列表。注意:表达式中的运算符号两侧允许有空格,以增加可读性。但在复数或符号表达式中要尽量避免,以防出错。在MATLAB的基本语句结构中,等号左边的变量名列表和等号一起可以省略,这时将把表达式的执行结果自动赋给变量“ans”,并显示到命令窗口中。MATLAB有两种工作方式:交互式的命令行工作方式M文件的程序工作方式一. M文件用MATLAB语言编写的程序,称为M文件。 M文件有两类:命令文件和函数文件。命令文件:没有输入参数,也不返回输出参数。函数文件:可以输入参数,也可返回输出参数。M文件的建立与编辑建立新的M文件: 从MATLAB命令窗口的File菜单中选择New菜单项,再选择M-fi
5、le命令。命令文件将需要运行的命令编辑到一个命令文件中,然后在MATLAB命令窗口输入该命令文件的名字,就会顺序执行命令文件中的命令。【例1】 建立一个命令文件将变量a,b的值互换。 e31m文件:a=1:9; b=11,12,13;14,15,16;17,18,19; c=a;a=b;b=c; a b 在MATLAB的命令窗口中输入e31,将会执行该命令文件1. input函数:用于向计算机输入一个参数。调用格式: A=input(提示信息,选项);注:s选项,则允许用户输入一个字符串。例如想输入一个人的姓名,可采用命令 xm=input(Whats your name:,s)【例2】 求一
6、元二次方程a2 +bx+c=0的根。a=input(a=?); b=input(b=?); c=input(c=?); d=b*b-4*a*c; x=(-b+sqrt(d)/(2*a),(-b-sqrt(d)/(2*a)将该程序以aa.m文件存盘,然后运行aa.m文件。2 pause函数:暂停程序的执行。调用格式: pause(延迟秒数)注:如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。3 disp函数:命令窗口输出函数。调用格式: disp(输出项)注:输出项为字符串或矩阵。例如 A=Hello,MATLAB; disp(A)输出为: Hello,MAT
7、LAB(一)选择结构选择结构的语句有if语句和switch语句。1 if语句 格式一: if 条件 语句组 Endif rand(1)0.5disp(i love you)end格式二: if 条件 语句组1 else 语句组2 endif rand(1)0.5disp(i love you)elsedisp(i donot love you)end(一)选择结构格式三: if 条件1 语句组1 elseif 条件2 语句组2 elseif 条件m 语句组m else 语句组m+1 end【例3】 输入三角形的三条边,求面积。 A=input(请输入三角形的三条边:); if A(1)+A(2
8、)A(3) & A(1)+A(3)A(2) & A(2)+A(3)A(1) p=(A(1)+A(2)+A(3)/2; s=sqrt(p*(p-A(1)*(p-A(2)*(p-A(3); disp(s); else disp(不能构成一个三角形。) end运行: 请输入三角形的三条边:4 5 6 9.92162 switch语句switch语句根据变量或表达式的取值不同,分别执行不同的语句。其格式为: switch 表达式 case 值1 语句组1 case 值2语句组2 case 值m 语句组m otherwise 语句组m+1 end【例4】 根据变量 num 的值来决定显示的内容。 num
9、=input(请输入一个数); switch num case -1 disp(I am a teacher.); case 0 disp(I am a student.); case 1 disp(You are a teacher.); otherwise disp(You are a student.); end(二)循环结构实现循环结构的语句:for语句和while语句。1 for语句:格式: for 循环变量=表达式1:表达式2:表达式3 循环体语句 end注:其中表达式1的值为循环变量的初值,表达式2的值为步长,表达式3的值为循环变量的终值。步长为1时,表达式2可以省略。例:n=0
10、:1:10;y=n;for i=1:11y(i)=sin(n(i);endyl 为了得到最大的速度,在For循环(While循环)被执行之前,应预先分配数组。建议最好先使用zeros或ones等命令来预先配置所需的内存(即矩阵)大小l 可以利用break命令跳出for循环2 while语句格式为: while (条件) 循环体语句 endx = zeros(1,6); % x是一个的零矩阵 i = 1; while i x3 循环的嵌套如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。多重循环的嵌套层数可以是任意的。可以按照嵌套层数,分别叫做二重循环、三重循环等
11、。处于内部的循环叫作内循环,处于外部的循环叫作外循环。四函数文件1函数文件格式函数文件是另一种形式的M文件,每一个函数文件都定义一个函数。事实上,MATLAB提供的标准函数大部分都是由函数文件定义的。【例5】 编写函数文件求小于任意自然数n的Fibonacci数列各项。当n1時,Fn+2 = Fn+1 + Fn,而 F0=F1=1 function f=ffib(n) %用于求Fibonacci数列的函数文件 %f=ffib(n) f=1,1; i=1; while f(i)+f(i+1)n f(i+2)=f(i)+f(i+1); i=i+1; end将以上函数文件以文件名ffib.m存盘,然
12、后在MATLAB命令窗口输入以下命令,可求小于2 000的Fibonacci数。 ffib(2000)2函数调用 函数文件编制好后,就可调用函数进行计算了。如上面定义ffib函数后,调用它求小于2000的Fibonacci数。函数调用的一般格式是: 输出实参表=函数名(输入实参表)【例6】 利用函数的递归调用,求n!。 function f=factor(n) if n=1 f=1; else f=factor(n-1)*n; end return; %返回 在命令文件main2.m中调用函数文件factor.m: for i=1:10 fac(i)=factor(i); end fac程序运行结果是: fac = Columns 1 through 6 1 2 6 24 120 720 Columns 7 through 10 504 40320 362880 3628800习 题1. 自己给定20个数,求其中最大数和最小数。要求分别用循环结构和调用MATLAB的max函数、min函数来实现。2. 求Fibonacci数列 (1)大于4000的最小项。 (2)5000之内的项数。