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) 等如下所示: 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最后是从 0 到 360 的所有值,以 5 为增量。compemplumemtotalemission

这可能吗?如何?

4

1 回答 1

0

不是接收 a 的输入,而是将 a 定义为 0->360 度,步长为 5,然后转换为弧度。

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!)

于 2012-09-05T17:37:47.947 回答