2017-04-10 6 views
0

-CodeWarum ist die Handlung für diesen Matlab-Code leer?

clear;clc 
T=800; 
Pc=48.45; 
Tc=375; 
w=0.153; 
R=82.06; 
a=((0.45724)*(R^2)*(Tc^2))/Pc; 
b=((0.07780)*R*Tc)/Pc; 
B=(0.37464+(1.54226*w)-(0.26992*(w^2))); 
Tr=T/Tc; 
s=(1+(B*(1-sqrt(Tr))))^2; 
for Vm=90:5:1000 
    P=((R*T)/(Vm-b))-((a*s)/((Vm)^2+(2*b*Vm)-b^2)); 
end 
plot(Vm, P) 

Problem

Jedes Mal, wenn ich diesen Code ausführen, kommt es mit nur Zahlen auf beiden Achsen wie das Bild mit einem völlig leeren Grundstück aus weiter unten. Ich habe meinen Code ein paar Mal überprüft, aber ich kann das Problem immer noch nicht finden, besonders da der Code fehlerfrei läuft. Das Ergebnis, das ich auf dieser Handlung bekommen soll, ist das Verhalten von P, wenn der Wert von Vm zunimmt.

The result of the code

Weitere Informationen über die Quelle der Frage

Hier ist die ursprüngliche Frage, wenn Sie Interesse (Übung 1) sind.

The original question (Exercise 1)

Antwort

1

Versuchen Sie, Ihre Variablen angezeigt werden. Sie sehen Vm ist kein Array, sondern ein einwertiger Skalar. Wenn Sie die Schleife über Vm durchlaufen, dauert es jeweils einen Wert; Es baut kein Array.

MATLAB kann sofort Berechnungen auf mehrere Werte tun, wenn Sie also Vm definieren ein Array zu sein und die Schleife fallen Ich vermute, es wird funktionieren ...

Versuchen Sie so etwas wie dieses (ersetzen die für -loop mit diesen Linien):

Vm = 90:5:1000 
P=((R*T)./(Vm-b))-((a*s)./((Vm).^2+(2*b.*Vm)-b^2)); 

P wird dann ein Array sein. Beachten Sie, dass wir .* anstatt * verwenden, wenn Sie mit dem Array Vm multiplizieren, da wir eine elementweise Multiplikation statt einer Matrixmultiplikation durchführen wollen. Ähnlich verwenden wir ./ statt / und .^ statt ^.

EDIT: Wenn Sie Notwendigkeit a dann for-Schleife zu verwenden, könnte man beide P und Vm als Arrays definieren und dann für jedes Element getrennt arbeiten innerhalb einer Schleife:

Vm = 90:5:1000; 
P = NaN(size(Vm)); 
for i=1:numel(Vm) 
    P(i)=((R*T)./(Vm(i)-b))-((a*s)./((Vm(i)).^2+(2*b.*Vm(i))-b^2)); 
end 

Da der oben ist Bei skalaren Werten ist es egal, ob Sie .* oder * ...

+0

verwenden Ich habe das versucht, aber ich bekomme immer noch die gleiche exakte leere Plot. – Amsi

+1

Hmmm, okay, Ich habe mich gerade an meiner MATLAB-Maschine angemeldet und es ausprobiert und es funktioniert gut für mich, ich bekomme ein nettes Diagramm, das ein bisschen wie ein exponentieller Verfall aussieht? Versuch es noch einmal? Nur um klar zu sein, ersetzen Sie die for-Schleife mit diesen beiden Zeilen. Sie tun nicht die for-Schleife. – Justin

+0

Oh, es tut mir leid, ich habe deine Antwort noch einmal gelesen und bemerkt, dass du gesagt hast, die for-Schleife zu eliminieren. Es funktioniert ohne die for-Schleife ohne ein Problem, aber auf der ursprünglichen Frage, es ist für mich erforderlich, eine for-Schleife für diesen Code zu verwenden. Glauben Sie, dass es eine Möglichkeit gibt, dieses Problem zu umgehen, indem Sie eine For-Schleife verwenden? – Amsi