当前位置:文档之家› 第4章 MATLAB语言的程序设计

第4章 MATLAB语言的程序设计


4.1.5 MATLAB程序设计举例

例2:要求按照考试成绩的等级输出百分制 分数段,试用开关结构编写程序。
g=input('please input grade:','s'); switch (g) case {'A','a'} disp('85~100'); case {'B','b'} disp('70~84'); case {'C','c'} disp('60~69'); case {'D','d'} disp('<60'); otherwise disp('输入错误!') end
运行结果: please input grade:a 85~100 please input grade:f 输入错误!
4.1.5 MATLAB程序设计举例

例3:用循环结构完成题目:设x的初始值为1.2, 迭代表达式 f ( x) x2 1 ,计算 f ( f ( f ... f ( x))) 共 10次复合,即 f 10 ( x) 的值。


(1)MATLAB用otherwise语句表示不符合 任何条件时默认执行,而C语言是用default 语句完成此功能。 (2)MATLAB执行完某case语句段后即自 动转出开关体而无需加break指令。而C语言 需要在下一个case语句前加break语句才能跳 出,否则要继续执行后面所有case的语句。
4.2 MATLAB函数的编写
引言


MATLAB下提供2种源程序文件格式。 一种是脚本文件。它的执行简单,用户只要在 MATLAB的提示符下输入该文件的文件名, MATLAB就会自动执行该M文件中的各条语句。 M文件只能对MATLAB工作空间中的数据进行处 理,文件中所有语句的执行结果也完全返回到工 作空间中。M文件格式适用于用户所需要立即得 到结果的小规模运算。 另一种即是M函数格式。除了输入和输出变量外, 其他在函数内部产生的所有变量都是局部变量, 只有在调试过程中可以查看,在函数调用结束后 这些变量均将消失。
tic; x = 0.01; for k = 1:10000 y(k) = log10(x); x = x + 0.01; end t1=toc tic; x = 0.01:0.01:100; y = log10(x); t2=toc %计时开始 %给x赋初值 %设定循环次数 %依次求y值 %x递增 %将程序运行时间赋给t1 %计数开始 %设定x所有值,以向量形式给出 %求出对应x的所有y,y为向量 %将程序运行时间赋给t2

4.1.4 try 和catch组成的试探结构

调用格式如下:
try 语句段1 catch 语句段2 end
该结构首先试探性地执行语句段1,如果在此段语句 执行过程中出现错误,则将错误信息赋给保留的lasterr变 量,并放弃这段语句的执行,转而执行catch后的语句段2。 当语句段2出现错误,则终止该结构。这一结构是C语言所 没有的,不过在C++、JAVA等语言中都具有这一结构。


4.1.3 循环结构 ——while语句循环结构
while 条件表达式 语句段 end while语句循环结构的条件表达式是一个逻 辑表达式。只要其值为真(非零),就将 自动执行语句段。一旦表达式为假就结束 循环。

4.1.3 循环结构 ——while语句循环结构

在以上的循环结构中可以加入break语句和continue 语句进行程序流程的控制。 Break 循环中断循环指令 ,并跳出本循环结构
4.1.4 try 和catch组成的试探结构 ——嵌套使用结构
try 语句段1 catch try 语句段2 catch 语句段3 end end
% 试探性地执行语句段1
% 尝试执行语句段2
% 捕获错误
4.1.4 try 和catch组成的试探结构 ——嵌套使用优点


1)提供了一种异常捕获机制,在catch语句 段捕获错误并说明错误的原因。 2)使程序更加可靠和高速运行。如将一段 不保险但速度快的算法放到try的语句段中, 而将一个保险的程序放到catch语句段中, 这样能保证原始问题的求解更加可靠,且 可能使程序高速运行。
4.1.1 if, else和elseif组成的条件转移结构 ——扩展的转移结构
扩展转移结构:
if 条件表达式1 语句段1 elseif 条件表达式2 语句段2 else 语句段3 end
流程为:如条件表达式1不满足,再判断elseif 的条件表达式2, 如果所有的条件均不满足,则执行else的语句段3。可以扩 展多个elseif 条件表达式及相应语句段。
a=[5 6 7 9 8]; index=input('请输入元素下标:'); try disp(int2str(a(index))); catch disp('下标不再范围内,请重新尝试。'); end
运行结果: 请输入元素下标:5 8 请输入元素下标:8 下标不再范围内,请重新尝试。
%设定一向量 %提示用户输入元素下标 %试探输出对应下标的元 素值 %如果输入不在向量范围 内,给出错误提示
运行结果: A= 8 1 6 3 5 7 4 9 2 ans = 15 15 15
%生成魔方矩阵 %生成一个3行1列矩阵空间 %给定循环表达式,循环次数为A 的列数,第一次取出A 的第一列赋给n,依次类推共3次 %将当前循环所取列与sum相加 %输出结果
4.1.5 MATLAB程序设计举例

例5:运行以下示例,比较循环和向量化编程的运 行效率。
其运行结果与for循环结果是一致的。不过,从程序可以看出,对这种已 知循环次数的情况,while循环比for循环要烦琐一些。
4.1.5 MATLAB程序设计举例

例4:以循环结构给出魔方矩阵各行的和。
%循环表达式为矩阵 A=magic(3) sum=zeros(3,1); for n=A sum=sum+n; end sum'

条件转移结构是一般结构化程序设计语言 都支持的最常见的程序结构。MATLAB下 有两种的转移结构。
4.1.1 if, else和elseif组成的条件转移结构 ——基本的转移结构

最基本的转移结构为:
if end 条件表达式 语句段
结构流程为: 如果满足条件表达式1,则执行语句段1; 否则跳过语句段1执行end之后的语句。

4.2 MATLAB函数的编写


4.2.1 MATLAB函数基本结构 4.2.2 MATLAB函数编写举例

4.3 MATLAB程序设计中的一些问题
4.1
MATLAB语言的流 程结构
引言

MATLAB提供了循环语句结构、条件语句 结构、开关语句结构以及类似于C++和 JAVA语言等面向对象语言的试探语句。
Continue 跳过此次循环到下一次循环 这2者的意义同C语言。


4.1.3 循环结构 ——注意事项

while与for不同:while语句循环结构循环次 数不确定;for语句循环结构确定
循环结构的执行速度较慢。所以在实际编 程时,如果能对整个矩阵进行运算时,尽 量不要采用循环结构而采取向量化编程 (Vectorization)以提高代码的执行效率。
运行结果: t1 = 0.4531 t2 = 0.0034
从以上不同运行时间来看,向量化编程对提高运行效率还是很明显的。注意,运 行时间随所用计算机配置的不同有所不同,但总的结果还应是向量化编程效率较 高。
4.1.5 MATLAB程序设计举例

例6:根据用户输入的下标值,以试探结构取出向 量中的对应元素值。
本节主要内容



4.1.1 4.1.2 构 4.1.3 4.1.4 4.1.5
if, else和elseif组成的条件转移结构 switch,case和otherwise组成的开关结 while, for循环结构 try 和catch组成的试探结构 MATLAB程序设计举例
4.1.1 if, else和elseif组成的条件转移结构
本章主要内容

第4章 MATLAB语言的程序设计

4.1 4.1.1 4.1.2 4.1.3 4.1.4 4.1.5
MATLAB语言的流程结构 if, else和elseif组成的条件转移结构 switch,case和otherwise组成的开关结构 循环结构 try 和catch组成的试探结构 MATLAB程序设计举例
4.1.2 switch,case和otherwise组成的开 关结构 ——注意事项

注意该结构中的开关表达式只能是标量或 字符串;case后面的表达式可以是标量、字 符串或单元数组。单元数组表示只要满足 这几个条件之一都去执行同一语句段。
4.1.2 switch,case和otherwise组成的开 关结构 ——与C语言的主while或for语句引导,用end结束, 这2个语句之间的部分称为循环体。
4.1.3 循环结构 ——for语句循环结构

for 循环变量 = v 语句段 end
v一般为行向量,循环变量每次从v向量中取一个数值,执 行一次循环体的内容,如此下去,直至执行完v向量中所 有的分量,将自动结束循环体的执行。循环次数即是v的 列数。 V的形式一般以快捷方式给出,形式多为或。也可以直接 给出向量具体值。v也可以是矩阵,这时每次的循环变量 值是当次的列向量。
4.1.2 switch,case和otherwise组成的开 关结构
相关主题