2013-05-30 71 views
1

我正在制作一个matlab文件来分析飞机的性能。我想要做的是看看多余的功率在哪里是最大的,以及多余功率最小的地方。我能够使matlab没有考虑超过Clmax的值(通过使用NaN)。
现在我想对多余的功率做同样的事情:我不希望我的轮廓图显示PS的负值。我尝试着和Cl一样做,但没有成功。Matlab不显示负值

这到目前为止的代码:

TA= 667233.2; 
W=228000; 
S=360; 
CDO=0,02; 
b=60; 
AR=10; 
h=0; 


v= [60:10:350] 
hoogte= [0:1000:17000] 

%TEST 

for j=1:length(hoogte) 
hoogte_temp = hoogte(j) 
[rho c] = Atmos(hoogte_temp) 
sigma= rho/1.225 

for i= 1:length(v) 
    v_temp = v(i); 
    q= rho*v_temp*v_temp/2 
    cl(i,j) = W*9.81/S/q 

    if (cl<1.91) 
    cd(i,j) = 0.02 + cl(i,j)^2/(AR*3.14*0.8)/beta(i) 
    D(i,j)= cd(i,j)*q*S 
    PS(i,j)=(TA*sigma-D(i,j))*v_temp/(W*9.81) 


    else %als Cl groter is dan 1,91: niet weergeven, ook niet Cd, D en ook niet Ps 
    cl(cl>1.91) = NaN; 
    cd(i,j)= NaN; 
    D(i,j)=NaN; 
    PS(i,j)=NaN; 
    end 

    if(v_temp/c<1) 
     beta(i)=sqrt(1-(v_temp/c)^2) 

    else 
     beta(i) = NaN 
    end 

    cd(i,j) = 0.02 + cl(i,j)^2/(AR*3.14*0.8)/beta(i) 
    D(i,j)= cd(i,j)*q*S 
    PS(i,j)=(TA*sigma-D(i,j))*v_temp/(W*9.81) 

end 

我想到的只是增加一个if (PS<0)甚至if PS<=D PS=NaN,但似乎并没有工作,如果我重新运行该程序,并期待在曲线图。

atmos.m文件是我在大气及其属性(如温度,海拔高度和密度)变化时所制作的文件。
我现在想要做的事情:
取消负PS值,找到PS变为0的sigma和v_temp值。这会导致我进入最大巡航高度。

我是matlab新手,这段代码中的所有内容都是通过查找互联网和看YouTube视频完成的。任何反馈将非常感激!我发现这一点:

data(indices_to_data_not_to_plot) = NaN; 
    surf(x,y,data); %# or whatever you're using 

在另一个话题,但它是我试过的事情,我想,这是不行的,除非我用的轮廓,而不是冲浪。

+0

你的例子不起作用,因为我没有'atmos'。您可以禁用NaN分配并在pastebin.com'disp(PS)'输出中显示吗? –

+0

欢迎来到SO!看来你在这里问了很多问题。您可以通过一个简单的问题获得更好的帮助,并且可以运行代码(尽可能简短,包括所有需要的数据)。同时,'contour(x,y,data,[0 1.5 3])'会在'data == 0,data == 1.5等等处创建等值线。这可能对您有帮助吗?它不会忽略负数,但不会显示轮廓。这比将负值设置为零要好(这会导致插值出错)。请参阅我的答案中的示例(提供更多信息后必须对其进行改进)。 – Floris

+0

我们能够弄清楚如何不显示Ps。感谢那!并感谢热烈的欢迎和答复。我明天将会看到disp(PS),因为它已经很晚了.-)!再次感谢! – user2437805

回答

1

一段简单的代码来阐明我在上面评论中所说的内容。这会创建一个波浪形2D图案(2D sinc函数),然后在不同的级别添加轮廓 - 有时通过强制轮廓级别,有时通过强制数据。

% contour example 
x = linspace(-10,10,20); y=x; 
[xx yy]=meshgrid(x,y); 
r = sqrt(xx.^2+yy.^2); 
z = sin(r)./r; 
figure 
subplot 121 
imagesc(x,y,z); axis xy; axis image 
colormap gray 
hold all 
contour(x,y,z,0:0.1:1,'r') 
contour(x,y,z,[0 0],'b') % blue line at "good" zero 
zclip = z; 
zclip(z<0)=0; 
contour(x,y,zclip,[0 0],'g') % green line at "clipped" zero 

subplot 122 
imagesc(x,y,z); axis xy; axis image 
colormap gray 
hold all 
contour(x,y,z,'w') 

这将产生以下输出:

enter image description here

正如可以看到的,使用矢量0:0.1:1在第一contour命令导致只要绘制正轮廓(以红色,从'r') ;使用[0 0]作为第二次调用中的轮廓规格会导致仅在z==0处绘制蓝色('b')轮廓;但是当我实际上将负数据设置为零时,我得到了第三个轮廓线(绿色)。这是因为当没有真正的“交叉”时很难“估计过零点”......

在右侧,您看到“常规”轮廓绘图的结果,白色轮廓位于“默认”间距处。

注 - 我绘制的强度地图以显示它如何可以这样做,但很明显,你可以有等高线地图绘制,而不首先显示强度图...

请使用上面的例子作为一个起点以改善您的问题(您可以运行完整的代码,并显示问题和解决方案) - 那么我们将能够给您一个更相关的答案。

快乐编码。

+0

谢谢,下午会尝试使用这个!真的很感激它! – user2437805

+0

让我知道它是怎么回事 - 我怀疑会有一两次迭代。我不在您的时区,因此回复将会延迟。 – Floris