当前位置:
文档之家› 06-MATLAB程序流程控制
06-MATLAB程序流程控制
case {12,1,2}
season = 'Winter';
end
fprintf('Month %d ===> %s.\n', month, season);
end
Month 1 ===> Winter.
.
.
.
.
.
.
Month 12 ===> Winter.
MATLAB 程序设计
程序流程控制之范例十二
1/6
1/7
1/8
1/9
1/10
1/6
1/7
1/8
1/9
1/10
1/11
向量化编程: [I,J]=meshgrid(1:6,1:6);h=1./[I+J-1]
MATLAB 程序设计
程序流程控制之范例三
在下例中,for 循环列出先前产生的 Hilbert 矩阵的每一直行的平方和:
format short
MATLAB程序设计入门篇 程序流程控制
MATLAB 程序设计
6-1 循环指令
MATLAB 提供两种循环指令
for 循环(For Loop) while 循环(While Loop)
MATLAB 程序设计
Formats of For Loops
Format 1:
for 变数 = 向量
表达式
在上例中,矩阵 x 最初是一个 1×6 大小的零矩阵,在 for 循环中,变量 i 的值依次是 1 到 6,因此矩阵 x 的第 i 个元素的值依次被设为 1/i。
向量化编程一句可实现 x=1./[1:6]
我们接着可用分数形式来显示此数列:
>> format rat
% 使用分数形式来显式数值
>> disp(x)
i = i+1;
end
x
% 显示 x
x=
1.0000 0.5000 0.3333 0.2500 0.2000 0.1667
MATLAB 程序设计
程序流程控制之范例七
若要用 while 指令找出最小的 n 值,使得 n! > 1e100 ,可输入如下: n = 1; while prod(1:n) < 1e100 n = n+1 end fprintf('%g! = %e > 1e100\n', n, prod(1:n)); 70! = 1.197857e+100 > 1e100
end
在上述语法中,变量的 值会被依次设定为向量 的每一个元素值,来执 行介于 for和 end 之间 的表达式。
Format 2:
for 变数 = 矩阵
表达式
end
在上述语法中,变量的 值会被依次设定为矩阵 的每一个列,来执行介 于 for 和 end 之间的表 达式。
MATLAB 程序设计
x = [1 -2 3 -4 5];
posTotal = 0;
for i = 1:length(x)
if x(i)<0, continue; end % 若 x(i) 小于零,跳到此循环的下一回合
posTotal=posTotal+x(i);
end
posTotal
% 显示 posTotal 的值
posTotal =
1
1/2
1/3
1/4
1/5
1/6
MATLAB 程序设计
程序流程控制之范例二
for 循环可以是多层或巢状式(Nested)的,在下例中即产生一个 6×6 的Hilbert
矩阵 h,其中为于第 i 列、第 j 行的元素为 :
1
hi, j i j 1
h = zeros(6);
% 变数 x 是一个 6×6 大小的零矩阵
在上述语法中,expression 为一数值或字符串,当其值和 value(k) 相等 时,MATLAB 即执行 statement(k) 并跳出 switch 指令。若 expression 不等于 value(k),k=1, 2, …, n-1,则 MATLAB 会执行 statement(n) 并 跳出 switch 指令。
程序流程控制之范例一
下列 for 循环会产生一个长度为 6 的调和数列(Harmonic Sequence):
x = zeros(1,6);
% 变量 x 是一个 1×6 大小的零矩阵
for i = 1:6
x(i) = 1/i;
end
x
% 显示 x
x=
1.0000 0.5000 0.3333 0.2500 0.2000 0.1667
上述的 if-else 为双向条件,亦即程序只会执行「表达式一」或「表达式 二」, 不会有第三种可能。
MATLAB 程序设计
程序流程控制之范例十
MATLAB 亦可执行多向条件,若要进行更多向的条件,只需一再重复 elseif 即可。 例如,欲判断 y 向量之元素是属于 3n、3n+1、 或 3n+2,可输入如下: y = [3 4 5 9 2]; for i = 1:length(y) if rem(y(i),3)==0 fprintf('y(%g)=%g is 3n.\n', i, y(i)); elseif rem(y(i), 3)==1 fprintf('y(%g)=%g is 3n+1.\n', i , y(i)); else fprintf('y(%g)=%g is 3n+2.\n', i , y(i)); end end y(1)=3 is 3n. y(2)=4 is 3n+1. y(3)=5 is 3n+2. y(4)=9 is 3n. y(5)=2 is 3n+2.
if-else 条件指令
switch-case-otherwise 条件指令( MATLAB 在第 五版之后开始支持)
MATLAB 程序设计
if-else 条件指令
最常用的条件指令是 if-else,其使用语法为
if 条件式 表达式一;
else 表达式二;
end
在上述语法中,当条件式成立时,MATLAB 将执行表达式一,否则,就执行表达式二。 若不需使用表达式二,则可直接省略 else 和 表达式二。
MATLAB 程序设计
程序流程控制之范例四
若要跳出 for 循环,可用 break 指令。例如,若要找出最小的 n 值,满足 n! > 1e100,可输入如下:
for i = 1:1000
if prod(1:i) > 1e100
fprintf('%g! = %e > 1e100\n', i, prod(1:i));
MATLAB 程序设计
switch-case-otherwise 条件指令
MATLAB 在第五版开始支持 switch-case-otherwise 的多向条件指令,其 使用语法如下: switch expression case value(1) statement(1) case value(2) statement(2) … case value(n-1) statement(n-1) otherwise statement(n) end
for i = 1:6
for j = 1:6
h(i,j) = 1/(i+j-1);
end
end
format rat
% 使用分数形式来显式所有数值
h
% 显示 h
1
1/2
பைடு நூலகம்1/3
1/4
1/5
1/6
1/2
1/3
1/4
1/5
1/6
1/7
1/3
1/4
1/5
1/6
1/7
1/8
1/4
1/5
1/6
1/7
1/8
1/9
1/5
While loop 的格式如下:
while 条件式 表达式;
end
在上述语法中,只要条件式为真,表达式就 会一再被执行
MATLAB 程序设计
程序流程控制之范例六
先前产生调和数列的例子,亦可用 while 循环改写如下:
x = zeros(1,6);
i = 1;
while i<=6
x(i) = 1/i;
在上例中,第一个警告讯息是 MATLAB 自动产生的,第二个 警告讯息则是我们的程序代码产生的,其中 isnan(x) 可用于 判断 x 是否为 NaN,若是,则传回 1(真),否则即传回 0 (伪)。
MATLAB 程序设计
程序流程控制之范例九
在下例中,我们可根据向量 y 的元素值为奇数或偶数,来显示不同的讯息: y = [0 3 4 1 6]; for i = 1:length(y) if rem(y(i), 2)==0 fprintf('y(%g) = %g is even.\n', i, y(i)); else fprintf('y(%g) = %g is odd.\n', i, y(i)); end end y(1) = 0 is even. y(2) = 3 is odd. y(3) = 4 is even. y(4) = 1 is odd. y(5) = 6 is even.
与前述的 for 循环相同,在任何时刻若要跳出 while 循环,亦可使用 break 指令;若要跳到下一回合的 while 循环,也可以使用 continue 指令。
break 指令若用在多重循环中,每次只跳出包含break指令的最内部循 环。
MATLAB 程序设计