在不同的值上绘制matlab函数

时间:2012-09-05 16:27:11

标签: matlab plot

我在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上绘制这方面的各个方面。我希望看到turbemcompemplumem以及最后totalemission的图表,其中0到360之间的所有值的增量均为5。

这可能吗?怎么样?

1 个答案:

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