2016-04-13 135 views
0

我想計算某些數組,但我面臨的問題是數組在每次迭代中都在變化。 我想打印動態for循環在Matlab中

for n=1 
    s(1)u(1) 
for n=2 
    s(2)u(1)+(s(1)-s(2))u(2) 
for n=3 
    s(3)u(1)+(s(2)-s(3))u(2)+(s(1)-s(2))u(3) 

回答

1

最好的方式做到這一點取決於你的設置。如果你只是想做一個矩陣/矢量運算而沒有很多循環,請注意,這看起來幾乎像是s反轉和u之間的一個內積,除了一些術語已經轉化爲差異。如果我理解你的等式,它看起來像這樣:

N = 12; 
s_all = 1:N; 
u_all = 7:N+6 


for M = 1:N 
    s = s_all(1:M); 
    u = u_all(1:M); 

    ds = s - [s(2:end) 0]; 
    result = u*ds(end:-1:1)' 
end 

注意我的數據是一個行向量。

如果N不會增長太大,如果你沒有在一開始知道N最終大小能正常工作,或者如果su在每次迭代的所有變化的值。

根據數據的大小,如果us必須在每次迭代相同的前值,則可能通過預先分配us上面的for循環看到更好的結果,然後將新的值一次一個,而不是複製新的su並重新計算整個ds值。

像這樣:

s = nan(1,N); 
u = nan(1,N); 
ds = nan(1,N); 

for M = 1:N 
    s(M) = s_all(M); 
    u(M) = u_all(M); 

    if(M>1) 
    ds(M-1) = s(M-1) - s(M); 
    end 
    ds(M) = s(M); 
    result = u(1:M)*ds(M:-1:1)' 
end 
+1

您在您的循環來重寫'result' ...? – Dan

+0

是的,如果你想保留它,你可以寫'result(M)= blablabla' – Steve

+0

如果你不想保留它,那麼爲什麼有循環?或者說,爲什麼這條線在循環中? – Dan