Matlab不显示负值

时间:2013-05-30 18:44:52

标签: matlab plot contour figure

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

到目前为止的代码:

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

在另一个主题中,但这是我尝试过的东西,这是行不通的,除了我使用轮廓而不是冲浪。

1 个答案:

答案 0 :(得分: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]作为轮廓规范会导致在'b'处绘制蓝色(z==0)轮廓;但是当我实际上将负数据设置为零时,我得到了参差不齐的第三个轮廓(绿色)。这是因为当没有真正的“交叉”时,很难“估计过零点”......

在右侧,您可以看到“常规”等高线绘图的结果,白色轮廓为“默认”间距。

注意 - 我绘制了强度图以显示它是如何完成的,但显然你可以绘制轮廓图而不先显示强度图......

请使用上面的示例作为改进问题的起点(您可以运行的完整代码,并显示问题和解决方案的方法) - 然后我们将能够为您提供更相关的答案。

快乐的编码。