2017-01-11 5 views
0

XY으로 표시된 2 개의 변수를 반환하는 프로그램이 있습니다. X의 크기는 3 x 5이고 Y은 3 x 3입니다. 값이 무한대인지 확인하고 싶지만 Matlab은 그렇게하지 않습니다. 일반적으로 이것은 어떤 행렬에 대해서도 수행 할 것이지만이 코드는 그림에 표시된 행렬에 대해 작동하지 않습니다. 적절한 방법은 무엇입니까? 전체 행렬 NaN 경우Matlab에서 무한 값을 확인하는 방법

clear all 


    Y = [ 

     NaN + NaNi  NaN + NaNi  NaN + NaNi 
     NaN + NaNi  NaN + NaNi  NaN + NaNi 
     NaN + NaNi  NaN + NaNi  NaN + NaNi]; 

    if (isnan(Y)) 
     disp(' values in Y are infinity') 
    end 

    X = 1.0e+017 *[ 

     NaN + NaNi  NaN + NaNi  NaN + NaNi  NaN + NaNi -7.8517 - 0.0000i 
     NaN + NaNi  NaN + NaNi  NaN + NaNi  NaN + NaNi -3.9259 - 0.0000i 
     NaN + NaNi  NaN + NaNi  NaN + NaNi  NaN + NaNi -1.9629 - 0.0000i]; 
    if (isnan(X)) 
     disp(' values in X are infinity') 
    end 

답변

3

help if에서 :

[는 IF의 몸에서] 명령문이 실행됩니다 [조건] 표현의 실수 부분이 '0'이 아닌 요소가있는 경우 . 귀하의 경우에는

, if 상태에서 그대로 사용하는 경우 false로 평가 것

>> isnan(X) 
ans = 
    1  1  1  1  0 
    1  1  1  1  0 
    1  1  1  1  0 

.

이 명시하는 것이 낫다하십시오 NaNX 어디서나이있는 경우

if any(isnan(X(:)) 
    disp('X contains a NaN'); end 

메시지를 표시 할 것이며,

if all(isnan(X(:)) 
    disp('X is all-NaN'); end 

는 경우에만 모든 메시지를 표시 할 것의 요소는 X이고 NaN입니다.

isfinite도보세요. infNaN을 한 번에 감지 할 수 있습니다.

0

코드는 values in X are infinity를 표시합니다. 행렬에 none-NaN 요소가 하나라도 있으면 아무 것도 표시하지 않습니다.
행렬에 NaN에 대해 disp(' values in X are infinity')을 쓰려면 행렬을 살펴보고 각 요소를 확인해야합니다. 두 개의 중첩 루프와 함께 수행

for i1=1:row 
    for j1=1:col 
     if (isnan(X(i1,j1))) 
     disp(' values in X are infinity') 
     end 
    end 
end 
+0

코드를 실행했을 때'정의되지 않은 함수 또는 변수 'NaNi'가 발생했습니다. 또한이 연산은 3 차원 인 다른 행렬, 즉 X1 (:, :, k) = X에 행렬 'X'를 저장하려는 경우에 적합합니다. 'k = 2'에서'X = X1 (:, :, k-1) '과 같은'X1'의 값을 바꾸고 싶습니다. '오류를 제거하는 방법과이 작업을 수행하는 방법을 도와 주시겠습니까 – SKM

+0

@SKM 이것은 "NaNi"만 입력했기 때문입니다. 이것은 MATLAB이 표현을 표시하는 방식이지만, 그렇게 쓰지는 못합니다. 'X = NaN + NaN * i' ('i'는 작업 공간의 변수가 아닙니다)와 같은 것을해야합니다. X에 하나의 NAN 요소가 있는지 검사하고 싶다면'any'를 사용해야합니다 :'if anyan (X)) disp ('values ​​...'); end' – Adiel

+0

'Y' 행렬은 3 행과 3 행을 가지고 있습니다. 각 원소는'NaN + NaNi'와 같습니다. 그것이 사실이라면 어떤 오류도 없어야합니다. 내 코드를 확인 했어. NaNi 자체가 matlab에 인식되지 않을 것이라고 생각하십시오. 'NaN'(즉, 'NaN + NaNi')이 있어야합니다. 두 번째 질문에 오류 –