我在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)等看起来像这样: function engine1 = 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:360
上绘制这方面的各个方面。我希望看到turbem
,compem
,plumem
以及最后totalemission
的图表,其中0到360之间的所有值的增量均为5。
这可能吗?怎么样?
答案 0 :(得分:0)
不是接收输入,而是将步长为5定义为0-> 360度,然后转换为弧度。
a=pi*(0:5:360)/180;
然后完全按照您的方式计算这些角度的发射分量,然后使用极坐标图来显示它们
polar(a,totalemission);
对于您未明确保存的条款,例如turbem(a,t)
,您应将它们存储在turbineEmission
等新变量中,以便您可以在不重新计算的情况下绘制它们。
我没有详细检查你的实现,但它似乎已经足够矢量化,这种方法可以正常工作。需要注意的一点是,最好不要将逻辑数组存储到c1,c2和c3变量中。因此,例如在e1中,您将使用
engine1(a<=45)=1;
engine1(a>45 & a<155)=0;
engine1(a>=155)=1;
更新:好吧,忽略最后一部分。看起来2011b上的两个实现之间的速度差异可以忽略不计(感谢Matlab!)