当前位置:文档之家› MATLAB程序设计

MATLAB程序设计

MATLAB程序设计MATLAB提供了一个完善的程序设计语言环境,使用户能够方便地编制复杂的程序,完成各种计算。

本节先介绍关系运算、逻辑运算,再介绍M-文件(即程序文件)的结构及MATLAB的程序控制流语句。

一、关系运算和逻辑运算1.关系运算(1)关系运算符:< ;< = ;> ;> = ;= = ;~ =(2)关系表达式:用关系运算符将两个同类型的量(表达式)连接起来的式子。

【注】①关系运算本质上是标量运算,关系表达式的值是逻辑值(0-假1-真);②当作用于两个同样大小矩阵时,则分别对两个矩阵的对应元素运算,结果是一个0-1矩阵。

例1.对向量进行关系运算。

>> A=1:5,B=5:-1:1 % 输入向量A = 1 2 3 4 5B = 5 4 3 2 1>> C=(A>=4) % 对向量进行关系运算C = 0 0 0 1 1>> D=(A==B) % 对向量进行关系运算D = 0 0 1 0 02.逻辑运算(1)逻辑运算符:& (and,与)、| (or,或)、~ (not,非)(2)逻辑表达式:用逻辑将两个逻辑量连接起来的式子。

【注】①逻辑运算本质上是标量运算,它将任何非零元素视为1(真);②当作用于两个同样大小矩阵时,则分别对两个矩阵的对应元素运算,结果是一个0-1矩阵。

(真值表见P27)例2.对向量进行逻辑运算。

>> a=1:9,b=9-aa = 1 2 3 4 5 6 7 8 9b = 8 7 6 5 4 3 2 1 0>> c=~(a>4) % 非运算c = 1 1 1 1 0 0 0 0 0>> d=(a>=3)&(b<6) % 与运算d = 0 0 0 1 1 1 1 1 13.逻辑函数any(x) 向量x 中有非零元返回1,否则返回0。

(向量函数) all(x) 向量x 中所有元素非零返回1,否则返回0。

(向量函数) isempty(x) 矩阵x 为空矩阵返回1,否则返回0。

find(x) 返回向量x 中非零元下标,若x 是矩阵,则视其为一长列向量。

例3.对向量或矩阵进行逻辑运算,或调用逻辑函数。

>> a=[1 0 -5 0;-3 0 8 2] a = 1 0 -5 0 -3 0 8 2 >> b=all(a),c=any(a) b = 1 0 1 0 c = 1 0 1 1>> x=isempty(a) % 判定矩阵a 是否为空,不能用关系式”a==[]”! x = 0>> y=find(c) %返回向量c 中非零元下标 y = 1 3 4>> z=find(a) % 1个输出参数 z = [1 2 5 6 8]’>> [m,n]=find(a) % 2个输出参数二、M-文件的结构M-文件就是MATLAB 程序文件,它是一个包含MATLAB 语句组(命令序列)的普通ASCII 文本文件,其扩展名为“.m ”。

M-文件有两类:脚本文件和函数文件。

1.脚本文件(亦称命令M-文件)脚本文件的结构比较简单,它没有输入参数和输出参数,只是一些MATLAB 命令行的组合。

脚本文件中定义的变量都是全局变量。

n = 11 3 3 4m =1 2 1 2 2例4.给定矩阵⎪⎪⎭⎫⎝⎛=654321A ,⎪⎪⎭⎫⎝⎛=210104B ,编写命令文件,输入矩阵A 、B ,并计算输出它们的和与差。

解:建立如下M-文件SY00504.mA=[1 2 3;4 5 6]; % 输入矩阵A B=[4 0 1;0 1 2]; % 输入矩阵B C=A+B % 计算输出A 与B 的和 D=A-B % 计算输出A 与B 的差将上述文件以SY00504.m 为名存盘,然后在命令窗口调用此M-文件,则有 >> SY00504C = 5 2 4D = -3 2 2 4 6 8 4 4 42.函数文件(亦称函数M-文件)和命令文件相比,函数文件稍微复杂一些。

通常函数文件包含以下几个部分: (1)函数定义行 位于文件首行,以function 开头,说明函数名、输入/输出参数. (2)帮助信息 紧跟函数定义行后面,以%开头的注释行,给出该函数的在线帮助. (3)函数体 函数的执行语句部分,是函数文件的核心部分。

(4)注释部分 命令行中以符号“%”开始直到该行结束部分的注释语句。

例5.编写函数文件,计算任意两个同维数矩阵的和与差。

(L000402.m ) 解:建立如下函数文件SY00505.m function [C,D]=SY00405(A,B)% 给定矩阵A 和B ,计算输出其矩阵和C 和矩阵差D C=A+B; % 计算矩阵和 D=A-B; % 计算矩阵差将上述文件以SY00405.m 为名存盘,然后在命令窗口调用函数文件,则有 >> A=[1 2 3;4 5 6];B=[4 0 1;0 1 2]; >> [C,D]=SY00505(A,B)C = 5 2 4D = -3 2 2 4 6 8 4 4 4【注】①函数文件的第一行必须是函数说明语句;输入参量用圆括号括起,输出参量多于1个时用方括号括起;多个输入/输出参量时,参量之间用逗号隔开。

②函数文件的变量一般是局部变量,可以用global 命令将某些变量说明为全局变量。

③函数文件的文件名一般应与函数说明语句中定义的函数名相一致。

④函数文件可以递归调用。

三、M-文件的建立、编辑与调用1.M-文件的建立与编辑方法1:在命令窗口输入命令:edit [M-文件名],即可打开相应M-文件编辑器。

方法2:单击菜单“File”->“New”->“M-file”,打开空白M-文件编辑器;方法3:单击菜单“File”->“Open”->输入文件名,打开相应M-文件编辑器;方法4:在当前目录窗口中选择某M-文件,双击则可打开该M-文件编辑器;2.M-文件的调用方法1:在MATLAB命令窗口中直接键入M-文件名,然后回车;方法2:在当前目录窗口选择某M-文件,击右键选择命令RUN,即可运行该M-文件;方法3:在M-文件编辑窗口中,单击工具钮RUN或菜单Debug/RUN,即可运行该M-文件。

【注】①M被调用的M-文件必须位于当前目录或文件搜索路径范围内。

②调用函数文件时,须事先对输入参量赋值,然后按照以下格式调用输出参量=函数名(输入参量)(回车)其中,实际参数和形式参数可以不同;输入参数要用小括号将其括起,输出参数多于一个时,要用中括号“[]”将其括起;参数间用逗号隔开。

四、MATLAB的控制流语句MATLAB与其它计算机高级语言一样,有它自己的控制流语句,用户使用它们可以方便地编写出各种M-文件(应用程序)。

1.选择结构(1)if 语句一般格式:if <关系表达式1><语句体1>elseif <关系表达式2><语句体2>…elseif <关系表达式n><语句体n>else<语句体n+1>end基本功能:若表达式j(j=1,2,…,n)的值为真,则执行语句体j,然后执行end的后续命令;否则,则执行语句体n+1,然后执行end的后续命令。

【注】if 语句结构中,关键字“else ”和“elseif ”所在语句行以及其后的语句体都不是必需的,但是关键字“end ”不能省略。

例6.编写函数文件,计算分段函数解:编写函数文件(fenduan .m)如下:function y= fenduan (x) % 计算分段函数 if x<=0y=0; elseif x<=2*pi y=sin(x); elsey=x-2*pi; end(2)switch 语句一般格式: switch <表达式> case 值1<语句体1> … case 值n<语句体n> otherwise<语句体n+1> end基本功能:首先计算表达式的值,若该值与值j(j=1,2,…,n)相等,则执行语句体j ,然后执行end 的后续命令;否则,则执行语句体n+1,然后执行end 的后续命令。

⎪⎩⎪⎨⎧>-≤<≤=;22;20)sin(;00πππx x x x x y 若若若例7.编写命令文件,从键盘输入某学生成绩(5分制),计算机判断并输出该生成绩的优良等级。

解:编写命令文件(SY00507.m)如下:x=input('请输入您的分数:x=');switch xcase 5disp('优秀!');case 4disp('良好!');case 3 >> SY00507 % 运行程序disp('及格!'); 请输入您的分数:x=4otherwise 良好!disp('不及格!')end2.循环结构(1)for 语句一般格式:for 循环变量=矩阵{语句体}end基本功能:循环循环变量依次取矩阵的每一列,然后执行一次语句体;遍历矩阵的各列后,然后执行end的后续命令。

【注】①for语句有简化格式:for <循环参数>=<初值>:<步长>:<终值><语句体>end其中步长省略时,则默认步长为1.②for循环不能由循环体内给循环变量重新赋值来终止;③for循环可以按需要进行嵌套;例8.编写函数文件,产生m ×n 阶Hilber 矩阵。

解:编写函数文件(hhilb.m)如下:function H=hhilb(m,n) % H 的i,j 处元素H(i,j)=1/(i+j-1) H=zeros(m,n); % 预先分配数组 for i=1:m for j=1:nH(i,j)=1/(i+j-1); endend format rat, H=H; % 取有理数表示。

例_8.编写函数令文件,计算并输出A 的各行向量的元素和(hanghe.m)。

解:function X=hanghe(A)[m,n]=size(A); % 计算A 维数 X=zeros(m,1); % 零初始化 for y=A X=X+y;end(2)while 语句一般格式: while <关系表达式> <语句体> end基本功能:若关系表达式值为真(1),则反复执行语句体,直至关系表达式值为假(0),则终止循环,转而执行end 的后续命令。

相关主题