2013-05-30 73 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