2016-04-13 16 views
0

Ich möchte bestimmte Array berechnen, aber das Problem, dass ich konfrontiert bin, ist, dass Array in jeder Iteration ändert. Ich möchteDynamische for Schleife in 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) 

und so weiter

Antwort

1

Der beste Weg, drucken diese auf Ihrem Setup zu tun, hängt davon ab. Wenn Sie nur eine Matrix-/Vektoroperation ohne viele Schleifen ausführen möchten, beachten Sie, dass dies fast wie ein inneres Produkt zwischen s und u aussieht, mit der Ausnahme, dass einige Begriffe in den Unterschied umgewandelt wurden. Wenn ich Ihre Gleichungen verstehe, sieht es so aus:

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 

Hinweis meine Daten sind ein Zeilenvektor.

dies funktioniert gut, wenn N wächst nicht zu groß, wenn Sie die endgültige Größe von N am Anfang nicht wissen, oder wenn die Werte von s und u alle bei jeder Iteration ändern.

In Abhängigkeit von den Größen Ihrer Daten, wenn u und s die gleichen Stand der Werte bei jeder Iteration haben könnten Sie bessere Ergebnisse sehen von u und s über die for-Schleife preallocating und dann in neue Werte einer nach dem anderen zu bringen, anstatt Kopieren über neue s und u und Neuberechnung der gesamten ds Wert.

So:

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

Sie überschreiben 'result' bei jeder Iteration in der Schleife ...? – Dan

+0

Ja, wenn Sie es behalten wollten, könnten Sie 'result (M) = blablabla' schreiben – Steve

+0

, wenn Sie es nicht behalten möchten, dann warum haben Sie die Schleife? Oder, warum ist diese Linie in der Schleife? – Dan