1-2、重复命令 最简单的重复命令是forfor 变数 = 矩阵; 运算式; end
其中变数的值会被依次设定为矩阵的每一行,来执行介於for和end之间的运算式。因此,若无意外情况,运算式执行的次数会等於矩阵的行数。
举例来说,下列命令会产生一个长度为6的调和数列(Harmonic sequence): x = zeros(1,6); % x是一个16的零矩阵 for i = 1:6, x(i) = 1/i; end
在上例中,矩阵x最初是一个16的零矩阵,在for
圈中,变数i的值依次是
圈(for-loop),其基本形式为:
1到6,因此矩阵x的第i个元素的值依次被设为1/i。我们可用分数来显示此数列:
format rat % 使用分数来表示数值 disp(x)
1 1/2 1/3 1/4 1/5 1/6
for圈可以是多层的,下例产生一个16的Hilbert矩阵h,其中为於第i列、第j行的元素为 h = zeros(6); for i = 1:6,
for j = 1:6, h(i,j) = 1/(i+j-1); end end disp(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 1/6 1/7 1/8 1/9 1/10 1/6 1/7 1/8 1/9 1/10 1/11
小提示:预先配置矩阵 在上面的例子,我们使用zeros来预先配置(Allocate)了一个适当大小的矩阵。若不预先配置矩阵,程式仍可执行,但此时MATLAB需要动态地增加(或减小)矩阵的大小,因而降低程式的执行效率。所以在使用一个矩阵时,若能在事前知道其大小,则最好先使用zeros或ones等命令来预先配置所需的记忆体(即矩阵)大小。
在下例中,forfor i = h,
disp(norm(i)^2); % 印出每一行的平方和 end
圈列出先前产生的Hilbert矩阵的每一行的平方和:
1299/871 282/551 650/2343 524/2933 559/4431 831/8801
在上例中,每一次i的值就是矩阵h的一行,所以写出来的命令特别简洁。 令一个常用到的重复命令是whilewhile 条件式; 运算式; end
也就是说,只要条件示成立,运算式就会一再被执行。例如先前产生调和数列的例子,我们可用while
圈改写如下:
圈,其基本形式为:
x = zeros(1:6); % x是一个16的零矩阵 i = 1; while i <= 6, x(i) = 1/i; i = i+1; end disp(x)
format short
1-3、逻辑命令
最简单的逻辑命令是if, ..., end,其基本形式为: if 条件式; 运算式; end
if rand(1,1) > 0.5,
disp('Given random number is greater than 0.5.'); end
Given random number is greater than 0.5.
1-4、集合多个命令於一个M档案
若要一次执行大量的MATLAB命令,可将这些命令存放於一个副档名为m的档案,并在 MATLAB提示号下键入此档案的主档名即可。此种包含MATLAB命令的档案都以m为副档名,因此通称M档案(M-files)。例如一个名为test.m的M档案,包含一连串的MATLAB命令,那麽只要直接键入test,即可执行其所包含的命令: pwd % 显示现在的目录 ans =
D:\\MATLAB5\\bin
cd c:\\data\\mlbook % 进入test.m所在的目录
type test.m % 显示test.m的内容 % This is my first test M-file. % Roger Jang, March 3, 1997 fprintf('Start of test.m!\\n'); for i = 1:3,
fprintf('i = %d ---> i^3 = %d\\n', i, i^3); end
fprintf('End of test.m!\\n'); test % 执行test.m Start of test.m! i = 1 ---> i^3 = 1 i = 2 ---> i^3 = 8 i = 3 ---> i^3 = 27 End of test.m!
小提示:第一注解行(H1 help line) test.m的前两行是注解,可以使程式易於了解与管理。特别要说明的是,第一注解行通常用来简短说明此M档案的功能,以便lookfor能以关键字比对的方式来找出此M档案。举例来说,test.m的第一注解行包含test这个字,因此如果键入lookfor test,MATLAB即可列出所有在第一注解行包含test的M档案,因而test.m也会被列名在内。 严格来说,M档案可再细分为命令集(Scripts)及函数(Functions)。前述的test.m即为命令集,其效用和将命令逐一输入完全一样,因此若在命令集可以直接使用工作空间的变数,而且在命令集中设定的变数,也都在工作空间中看得到。函数则需要用到输入引数(Input arguments)和输出引数(Output arguments)来传递资讯,这就像是C语言的函数,或是FORTRAN语言的副程