1

Matlabには3つの関数があります。

function [turbine] = turbem(a,t)

turbine=zeros(size(a));
c1=a<90;
c2=a>90 & a<270;
c3=a>270;

turbine(c1)=0;
turbine(c2)=t*0.5*(1+cos((a*pi)/90));
turbine(c3)=0;

end

function [compressor]=compem(a,c)

compressor=zeros(size(a));
c1=a<=90;
c2=a>90 & a<270;
c3=a>=270;

compressor(c1)=abs(cos((a*pi/180)))*c;
compressor(c2)=0;
compressor(c3)=abs(cos((a*pi/180)))*c;

end

function [plume]=plumem(a,p)

plume=zeros(size(a));
c1=a<90;
c2=a>=90 & a<=270;
c3=a>270;

plume(c1)=(a/90)*p;
plume(c2)=1*p;
plume(c3)=((360-a)/90)*p;

end

すべての関数は、飛行機のエンジンのさまざまな部分からの熱の放出の値を計算します。これは、エンジンの特定の部分が見えない角度から見た角度に依存します。

この次の部分では、値を入力して、表示できるエンジンの数に応じた総排出量で​​ある目的のエンドポイントを取得できます。

a=input('Enter Azimuth Angle');
t=input('Enter Turbine Emission Component');
c=input('Enter Compressor Emission Component');
p=input('Enter Plume Emission Component');
b=input('Enter Body Emission Component');

engemission=(turbem(a,t)+compem(a,c)+plumem(a,p)+b)
totalengines=(e1(a)+e2(a)+e3(a)+e4(a))
totalemission=totalengines*engemission

e1(a)、e2(a)などは次のようになります。functionengine1 = e1(a)

engine1=zeros(size(a));
c1=a<=45;
c2=a>45 & a<155;
c3=a>=155;

engine1(c1)=1;
engine1(c2)=0;
engine1(c3)=1;

end

基本的に、これのさまざまな側面をすべての角度でプロットできるようにしたいと思います0:5:360turbem、、そして最後に0から360までのすべての値を5刻みでcompemグラフ化したいと思います。plumemtotalemission

これは可能ですか?そしてどうやって?

4

1 に答える 1

0

a の入力を受け取るのではなく、5 刻みで 0->360 度になるように a を定義してから、ラジアンに変換します。

a=pi*(0:5:360)/180;

次に、これらの角度の放出成分を正確に計算し、極座標プロットを使用してそれらを提示します

polar(a,totalemission);

明示的に保存していない用語については、再計算せずにプロットできるようturbem(a,t)に、新しい変数に保存する必要があります。turbineEmission

私はあなたの実装を詳細にチェックしていませんが、このアプローチがうまく機能するには十分にベクトル化されているようです。注意すべきことの 1 つは、論理配列を c1、c2、および c3 変数に格納しない方がよいということです。たとえば、e1 では次のように使用します。

engine1(a<=45)=1;
engine1(a>45 & a<155)=0;
engine1(a>=155)=1;

更新:まあ、最後の部分は無視してください。2011b の 2 つの実装の速度差はごくわずかのようです (Matlab に感謝します!)。

于 2012-09-05T17:37:47.947 に答える