2016-04-13 16 views
0

Belirli bir diziyi hesaplamak istiyorum ancak karşılaştığım sorun, dizinin her yinelemede değiştiğidir. Bunun kurulum bağlıdır yapmakMatlab'da döngü için dinamik

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) 

ve böylece

cevap

1

iyi yolu yazdırmak istiyorum. Eğer sadece çok döngüsüz bir matris/vektör işlemi yapmak istiyorsanız, bu durum neredeyse bir ara ürün olarak s tersine ve u arasına benzediğine dikkat edin, ancak bazı terimler aralığa dönüşmüştür. Ben senin denklemler anlamak, bu şuna benzer:

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 

Not benim veri bir satır vektörüdür.

bu başında N son boyutunu bilmiyorsanız N, çok büyük büyümek etmezse çalışıyor ya eğer s ve u her tekrarda tüm değişiklik değerleri.

u ve s her tekrarda aynı önceki değerlere varsa döngü için yukarıdaki u ve s preallocating daha iyi sonuçlar görmek ve daha sonra bir anda yeni değerlere bir getirmek yerine olabilir, verilerinizin boyutlarına bağlı olarak Yeni s ve u üzerinden kopyalama ve ds değerinin tamamını yeniden hesaplanıyor. Bunun gibi

:

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

Sen döngü içinde her işleminde 'result' üzerine yazıyorsunuz ...? – Dan

+0

Evet, eğer onu korumak istiyorsan, “sonuç (M) = blablabla” – Steve

+0

yazabilirsin, eğer onu korumak istemiyorsan, neden döngü var? Ya da, neden döngüde bu çizgi var? – Dan