2015-10-13 177 views
0

我有一個矩陣,我用它來解決使用ode45方程的系統。我在while循環中迭代刪除一行。但是,我希望第一次迭代「繼續」而不是刪除任何箭頭,以便我可以將刪除一個數組的所有結果與使用初始矩陣的結果進行比較。Matlab迭代刪除一行矩陣,除了第一次迭代

它看起來像:

while smtg 
    A(pos,:)=0 % Do not compute this line the first iteration 
    pop=ode45(involving A) 
end 

我真正的代碼:

countrow=0; 
A=randi([0 1], 5, 5); 
distrib=sum(A,1);  
while sum(distrib)>5 
    countrow=countrow+1; 
    A(pos,:)=0; % remove one row 
    options = odeset('RelTol', 1e-4); 
    [t, pop]=ode45(@Diff,[0 MaxTime],[E I],options,n,m, A); 
    nbtot =sum(pop(:,n+1:2*n),2); 
end 

我試圖用

if countrow==1 % (the first iteration), 
    continue; 
end 

但會跳過,直到第二端,而不是nbtot計算等等我沒有想法...有什麼幫助嗎?

+0

我不是你想達到什麼完全清楚,所以只是一個供參考:實際上你可以從矩陣刪除行(從而降低其大小)通過使用'A(pos,:)= [];'。這顯然不會解決您的問題,但它可能會獨立於您的問題。 –

+0

不,我希望我的矩陣的大小保持不變,因爲之後繪製矩陣,這就是爲什麼我使用A(pos:,)= 0;但我承認,在任何其他情況下,這是做到這一點的方法! – user3767071

回答

1

如果你不想A(pos,:)=0; % remove one row對第一次迭代發生,然後把它放在一個if語句中像

countrow = countrow + 1; 
if countrow ~= 1 
    A(pos,:)=0; % remove one row 
end 

在MATLAB的~=符號是「不等於」。 A(pos,:)=0; % remove one row行現在只會在countrow而不是等於1時執行,但循環內的所有其他語句將按正常方式執行。


關鍵字continue將停止當前循環迭代的執行,並繼續到下一個循環迭代。所有在循環中的continue之後的語句都不會被執行。

+0

這個完美的作品,謝謝! – user3767071

1

或者你可以去:

A(pos,:)=A(pos,:)*(countrow==1); 
+0

也有效,謝謝! – user3767071