我在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)等如下所示: 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上绘制这个问题的各个方面。我希望看到从0到360的所有值以5为增量的turbem,compem,plumem,最后是totalemission的图表。
这个是可能的吗?又是如何做到的?
发布于 2012-09-06 01:37:48
而不是接收a的输入,您将以5为步长将a定义为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!)
https://stackoverflow.com/questions/12285850
复制相似问题