2016-11-07 7 views
0

Ich habe eine while-Schleife und konnte nicht feststellen, wie die Werte erfolgreich gespeichert werden. Jede Hilfe würde sehr geschätzt werden.Speichern von Werten mit einer while-Schleife (Matlab)

n = 0; a = 21; b = 0; c = 0; y = 37.6991; T = 18.5; z = 0.1591; d = 0; f = 15.3049; q = 2.2391e4; e = 5; x = 60; 
while n < x 
     a = a + b     
     c = y*(T-a)/z;     
     d = f*c;    
     b = d/q;     
     n = n + e; 
    end 

Der Wert I zu speichern bin versucht a, ich kann sagen, die Werte innerhalb der Schleife korrekt sind, sondern kann einfach nicht die Werte scheinen korrekt zu speichern.

+0

Wie können Sie feststellen, dass die Werte im Inneren korrekt sind? Wenn ich Ihren Code ausführen, erhalte ich einen Fehler "n undefined nahe Zeile 1 Spalte 7". Sie müssen ein vollständiges minimales funktionierendes Beispiel bereitstellen. – stephematician

+0

Gültiger Punkt, sorry, ich werde es jetzt aktualisieren. – Scott

+0

Korrigiert, ich ging durch das aktualisierte Code, um sicherzustellen, es funktioniert ohne Fehler – Scott

Antwort

1

Ein anderer Ansatz wäre zu erkennen, dass es sich um eine relativ einfach Rekursion.

n = 0; a = 21; y = 37.6991; T = 18.5; z = 0.1591; f = 15.3049; q = 2.2391e4; e = 5; x = 60; 
while n < x 
    a(end+1) = a(end) + f * y * (T - a(end))/(q * z); 
    n = n + e; 
end 

Diese Berechnung kann auch vektorisiert werden, aber wenn man genau die gleiche Leistung wollen, müssen Sie vorsichtig ein wenig zu sein:

n = 5:5:55; y = 37.6991; T = 18.5; z = 0.1591; f = 15.3049; q = 2.2391e4; a0 = 21; 
alpha = f * y * T/(q * z); 
beta = (1 - f * y/(q * z)).^(0:length(n)) 

a = a0 * beta + alpha * [0 cumsum(beta(1:end-1))]; 

Der Code scheint Klarheit zu verlieren (für mich), wenn vektorisiert, so würde ich wahrscheinlich bevorzuge die Schleife in diesem Szenario.

0

Try this:

counter = 1; 
n = 0; a = 21; b = 0; c = 0; y = 37.6991; T = 18.5; z = 0.1591; d = 0; f = 15.3049; q = 2.2391e4; e = 5; x = 60; 
var = zeros(1,12); 
while n < x 
     a = a + b;     
     c = y*(T-a)/z;     
     d = f*c;    
     b = d/q;     
     n = n + e; 
     var(counter) = a; 
     counter = counter+1; 
end 

Ich habe eine Variable namens var welche ein Vektor ist, der die Werte von a speichert. t osave Runtime Um i initialisiert es zu der erwarteten Größe der variablen var = zeros(1,12); (Dies ist nicht unbedingt erforderlich, aber empfohlen wird

+1

Nicht unbedingt erforderlich ????? Es ist *** streng *** ** empfohlen **. –

+0

Es funktioniert, vielen Dank, ich habe etwas ähnliches versucht, konnte aber nicht scheinen es alles zu tun. – Scott

Verwandte Themen