2013-05-30 2 views
1

항공기 성능을 분석하기 위해 matlab 파일을 만들고 있습니다. 내가하고 싶은 것은 초과 전력이 최대이고 초과 전력이 최소가되는 곳을 보는 것입니다. 나는 matlab에 Clmax보다 더 많은 값을 고려하지 않을 수 있었다 (NaN을 사용하여).
이제 과도한 힘에 대해서도 똑같이하고 싶습니다. 윤곽 플롯에 PS의 음수 값을 표시하고 싶지는 않습니다. 나는 나와 함께했던 것처럼 성공했지만 성공하지 못했습니다.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 값을 찾습니다. 이것은 최대 순항 고도까지 나를 안내 할 것이다.

저는이 코드의 모든 내용을 인터넷에서 찾아보고 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

에 오신 것을 환영합니다! 여기에 여러 질문을하는 것 같습니다. 당신은 간단한 질문으로보다 나은 도움을 얻을 수 있고 가능한 한 짧게 실행할 수있는 코드가 필요합니다. 필요한 모든 데이터가 포함되어 있습니다. 한편, 'contour (x, y, data, [0 1.5 3])'와 같은 것은'data == 0, data == 1.5 '등에서 등고선을 만들 것입니다. 음수는 무시하지 않고 윤곽선을 표시하지 않습니다. 음수 값을 0으로 설정하는 것보다 낫습니다 (보간이 잘못 될 수 있습니다). 내 대답의 예를 참조하십시오 (자세한 정보를 제공 한 후 개선해야 함). – Floris

+0

우리는시를 표시하지 않는 방법을 알아낼 수있었습니다. 고마워! 따뜻한 환영과 회신에 감사드립니다. 나는 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') 

이 다음과 같은 출력을 생성합니다 ('r'에서 빨간색으로) 첫 번째 contour 명령 벡터 0:0.1:1를 사용하여 볼 수 있듯이

enter image description here

그려 단지 긍정적 인 윤곽의 원인을 ; 두 번째 호출에서 윤곽선 지정으로 [0 0]을 사용하면 파란색 ('b') 등고선이 z==0에 그려집니다. 그러나 실제로 음수 데이터를 0으로 설정하면 난잡한 세 번째 컨투어 (녹색)가 나타납니다. 실제 "교차점"이 없을 때 "제로 크로싱"을 추정하기가 어렵 기 때문입니다 ...

오른쪽에 "기본"간격으로 흰색 윤곽선이있는 "일반"등고선 플로팅 결과가 표시됩니다.

주 -

출발점으로 위의 예제를 사용하십시오 ... 나는 그것을 할 수있는 방법을 보여주기 위해 강도지도를 그려하지만, 분명 당신은 등고선 먼저 강도지도를 표시하지 않고 플롯 할 수 있습니다 귀하의 질문 (귀하가 실행할 수있는 완전한 코드이며 문제와 해결책에 대한 접근법을 보여줌)을 향상시키는 데 도움이됩니다. 그러면 우리는 귀하에게보다 관련있는 답변을 드릴 수 있습니다.

해피 코딩.

+0

감사합니다. 오후에 사용하려고합니다! 정말 감사합니다! – user2437805

+0

어떻게 진행되는지 알려주세요. 반복 또는 두 가지가있을 것으로 판단됩니다. 응답 시간이 지연 될 수 있으므로 시간대에 있지 않습니다. – Floris

관련 문제