2017-01-30 8 views
0

私は3つの異なるグラフをプロットしようとしています。 h対T、h対P、およびh対rho。私はプログラムを実行するとき、私は3つの異なるグラフを取得していますが、データはありません。 私は何が間違っているのか分かりません。ここでMATLABで1つの入力と3つの出力を持つ関数をプロットする

は、プロットここ

for h=0:1:1000 
[ T,P,rho ] = stdatm(h); 
hold all 
subplot(1,3,1) 
plot(T,h,'r') 

subplot(1,3,2) 
plot(P,h) 

subplot(1,3,3) 
plot(rho,h) 
end 

ための私のコードで私の機能コード

function [ T,P,rho ] = stdatm(h) 
T0=288.16; 
P0=101.325; 
rho0=1.225; 
a=-6.5*10^-3; 
b=3*10^-3; 
c=-4.5*10^-3; 
d=4.0*10^-3; 
R=286.9; 
g=9.81; 

T1=T0+a*11000; 
P1=P0*(T1/T0)^(-g/(a*R)); 
rho1=rho0*(T1/T0)^((-g/(a*R))-1); 

T2=T1; 
P2=P1*exp((-g/(R*T2))*(25000-11000)); 
rho2=rho1*exp((-g/(R*T2))*(25000-11000)); 

T3=T2+b*(47000-25000); 
P3=P2*(T3/T2)^(-g/(b*R)); 
rho3=rho2*(T3/T2)^((-g/(b*R))-1); 

T4=T3; 
P4=P3*exp((-g/(R*T4))*(53000-47000)); 
rho4=rho3*exp((-g/(R*T4))*(53000-47000)); 

T5=T4+c*(79000-53000); 
P5=P4*(T5/T4)^(-g/(c*R)); 
rho5=rho4*(T5/T4)^((-g/(c*R))-1); 

T6=T5; 
P6=P5*exp((-g/(R*T6))*(90000-79000)); 
rho6=rho5*exp((-g/(R*T6))*(90000-79000)); 

T7=T6+d*(100000-90000); 
P7=P6*(T7/T6)^(-g/(d*R)); 
rho7=rho6*(T7/T6)^((-g/(d*R))-1); 

if h<=11000 
T=T0+a*h; 
P=P0*(T/T0)^(-g/(a*R)); 
rho=rho0*(T/T0)^((-g/(a*R))-1); 
elseif h>11000 && h<=25000 
T=T1; 
P=P1*exp((-g/(R*T))*(h-11000)); 
rho=rho1*exp((-g/(R*T))*(h-11000)); 
elseif h>25000 && h<=47000 
T=T2+b*(h-25000); 
P=P2*(T/T2)^(-g/(b*R)); 
rho=rho2*(T/T2)^((-g/(b*R))-1); 
elseif h>47000 && h<=53000 
T=T3; 
P=P3*exp((-g/(R*T3))*(h-47000)); 
rho=rho3*exp((-g/(R*T3))*(h-47000)); 
elseif h>53000 && h<=79000 
T=T4+c*(h-53000); 
P=P4*(T/T4)^(-g/(c*R)); 
rho=rho4*(T/T4)^((-g/(c*R))-1); 
elseif h>79000 && h<=90000 
T=T5; 
P=P5*exp((-g/(R*T))*(h-79000)); 
rho=rho5*exp((-g/(R*T))*(h-79000)); 
elseif h>90000 && h<=100000 
T=T6+d*(h-90000); 
P=P6*(T/T6)^(-g/(d*R)); 
rho=rho6*(T/T6)^((-g/(d*R))-1); 

end 
+1

各ポイントを1つずつプロットするのは、非常に効率が悪いです。なぜ、T、P、rhoベクトル(それぞれ1000個の要素)を構築してから3つのプロットを作成してみてください... – Justin

+0

@Justinと合意してください。ベクトルのすべての点を最初に生成し、プロットごとに 'plot/subplot'を1回だけ呼び出します。それをループで行うのは効率的ではありません。それは、グラフィックスシステムに大きな負担をかけることは言うまでもありません。 – rayryeng

+0

私のコードを実行すると、私のvecors h、T、P、およびrhoを得ることができません100の次元を持つh = 0:1:100 [T、P、rho] = stdatm(h); サブプロット(1,3,1) プロット(T、H) サブプロット(1,3,2) プロット(P、H) サブプロット(1,3,3) プロット上 端ホールド(rho、h) –

答えて

0

は、サブプロットのそれぞれにつきholdを試してみてくださいされています

for h=0:1:1000 
[ T,P,rho ] = stdatm(h); 
subplot(1,3,1) 
plot(T,h,'r') 
hold on 
subplot(1,3,2) 
plot(P,h) 
hold on 
subplot(1,3,3) 
plot(rho,h) 
hold on 
end 
hold off 

enter image description here

関数stdatmをベクトル化する方が良い解決策になります。

0

私は自分のコードを実行すると、h、T、P、rhoの1次元のベクトルしか得られません。したがって、各プロットで1つのデータポイント。

for h=0:1:100 
[ T,P,rho ] = stdatm(h); 
end 
hold on 
subplot(1,3,1) 
plot(T,h) 

subplot(1,3,2) 
plot(P,h) 

subplot(1,3,3) 
plot(rho,h) 
+0

ループごとにT、P、rhoの値を上書きします。あなたは '[T(h + 1)、P(h + 1)、rho(h + 1)] = stdatm(h);'を実行したいかもしれません。 ...効率的にループの前に。 – Florian

関連する問題