2017-04-10 10 views
0

コードこのMatlabコードでプロットが空になっているのはなぜですか?

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) 

問題

私はこのコードを実行するたびに、それは、以下に示す画像のように両方の軸上の数字だけで完全に空のプロットで出てきます。私は何度か自分のコードをチェックしましたが、特にコードがエラーなしで実行されているため、この問題を見つけることができません。私がこのプロットに乗っていると思われる結果は、Vmの値が増加するにつれてPの挙動です。あなたは(演習1)興味があるなら、質問

のソースに関する

The result of the code

追加情報はここで、元の質問です。

The original question (Exercise 1)

答えて

1

あなたの変数を表示してみます。 Vmは配列ではなく、むしろ単価スカラーです。 Vmをループすると、一度に1つの値が取り込まれます。配列を作成しません。

あなたがVmを定義する場合は配列にすることと、私はそれがうまくいく推測しているループをドロップするので、MATLABは、一度に複数の値に対して計算を行うことができます...

は(のために置き換え、このような何かを試してみてくださいこれらの行で-loop):

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

Pは配列になります。配列Vmで乗算する場合、*ではなく、.*を使用することに注意してください。行列の乗算ではなく要素ごとの乗算を行いたいからです。同様に、^ではなく/.^ではなく、./を使用します。

編集:もし、あなたが配列としてPVmの両方を定義することができ、その後、ループ内で別々に各要素上で動作するためのループを使用する必要

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 

以上があるのでスカラー値を扱う場合は、.*または*を使用するかどうかは関係ありません。

+0

私はそれを試みましたが、私はまだ同じ正確な空のプロットを取得しています。 – Amsi

+1

えええええええええええええええええええと、MATLABのマシンにログオンして試してみましたが、うまくいけば指数関数的減衰のような素敵なプロットが得られますか?再試行する?ちょうど明確にするために、forループをその2行に置き換えます。あなたはforループをしません。 – Justin

+0

ああ申し訳ありませんが、私はあなたの答えを読んで、forループを排除するように言ったことに気付きました。それはforループなしで問題なく動作しますが、元の質問では、私はこのコードのfor-loopを使用する必要があります。 forループを使ってこの問題を回避する方法はないと思いますか? – Amsi

関連する問題