1. 程式人生 > >Matlab簡單教程:迴圈

Matlab簡單教程:迴圈

迴圈輸出變數

for i=1:4
    i
end

其中1:4代表一個行向量1 2 3 4,在matlab中,行向量的另外一個表示方法是[1 2 3 4],即for i=1:4等價於for i=[1 2 3 4],編寫程式時牢記一個點:對於某次固定的迭代,i會從這個向量中取一個值,該值可以參與迴圈中的計算。

執行輸出

i =
     1
i =
     2
i =
     3
i =
     4

修改迭代步長

例子:遍歷1~10之間的所有奇數

for i=1:2:10
    i
end

其中1:2:10表示迭代從1開始,步長為2,最大不超過10,即代表行向量1 3 5 7 9

備註:步長可以為負值

遍歷行向量變數和列向量變數

X=rand(1,5);
for i=X
    i
end
X=rand(5,1);
for i=X
    i
end

其中rand(1,5)生成一個1行5列的矩陣,即行向量;rand(5,1)生成5列1行的矩陣,即列向量。生成的向量會存放在變數X中,然後使用for i=X對向量進行遍歷。

如果X為矩陣,對矩陣進行遍歷

X=magic(3);
X
for i=X
    i
end

執行輸出

X =
     8     1     6
     3     5     7
     4     9     2
i
= 8 3 4 i = 1 5 9 i = 6 7 2

其中magic(n)代表魔法函式(任意一行或一列的和值相等)。從執行結果中可以看出,對矩陣的迴圈就是在每次迭代中,依次取出矩陣的每一列。

終止迴圈break

X=[2 8 4 3 9 1];
for i=X
    if i==3
        disp('3 found');
        break;
    end
end

查詢向量X是否含有3,如果有則終止迴圈。

跳過本次迴圈continue

X=[5 7 -1
3 -8 6]
; sum=0; for i=X if i<0 continue; end sum=sum+i; end sum

計算向量X中所有大於0的數的和。

雙重迴圈和多重迴圈

雙重迴圈程式碼

X=magic(3);
X
[row,col]=size(X);
for i=1:row
    disp(['----- row: ', num2str(i),' -----']);
    for j=1:col
        disp(['col ',num2str(j),' :', num2str(X(i,j))]);
    end
end

執行輸出

X =
     8     1     6
     3     5     7
     4     9     2

----- row: 1 -----
col 1 :8
col 2 :1
col 3 :6
----- row: 2 -----
col 1 :3
col 2 :5
col 3 :7
----- row: 3 -----
col 1 :4
col 2 :9
col 3 :2

第一重迴圈遍歷每一行,對於其中一行,在第二重迴圈中對該行進行遍歷。在第二重迴圈中,一般使用X(i,j)這樣的形式取出參與計算的值。這裡只是對該值做了輸出。

三重迴圈程式碼

toFind=[12,23,9,10];
X=magic(3);

[row,col]=size(X);
for find=toFind
    disp(['---------- looking ',num2str(find)]);
    found=0;

    for i=1:row
        for j=1:col
            if X(i,j)==find
                disp([num2str(find),' found at position (',num2str(i),',',num2str(j),')']);
                found=1;
            end
        end
    end

    if found==0
        disp([num2str(find), ' not found']);
    end
end

運算輸出

---------- looking 12
12 not found
---------- looking 23
23 not found
---------- looking 9
9 found at position (3,2)
---------- looking 10
10 not found

查詢toFind向量中每一個值,在X矩陣中是否存在。

while迴圈

除了以上常用的for迴圈以外,在matlab中還可以使用while迴圈,參考doc while