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)
等
我想計算某些數組,但我面臨的問題是數組在每次迭代中都在變化。 我想打印動態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)
等
最好的方式做到這一點取決於你的設置。如果你只是想做一個矩陣/矢量運算而沒有很多循環,請注意,這看起來幾乎像是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
最終大小能正常工作,或者如果s
和u
在每次迭代的所有變化的值。
根據數據的大小,如果u
和s
必須在每次迭代相同的前值,則可能通過預先分配u
和s
上面的for循環看到更好的結果,然後將新的值一次一個,而不是複製新的s
和u
並重新計算整個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
您在您的循環來重寫'result' ...? – Dan
是的,如果你想保留它,你可以寫'result(M)= blablabla' – Steve
如果你不想保留它,那麼爲什麼有循環?或者說,爲什麼這條線在循環中? – Dan