2011-12-15 2 views
0

FD는 엑셀 파일이고 A는 FD 열 5의 데이터입니다 (열 5의 각 셀은 1,2 또는 3을 포함합니다)왜 Matlab에서 벡터에 단락 논리 연산자를 사용할 수 없습니까?

FD의 5 열에있는 셀에 2 또는 3이 포함 된 경우 . FD의 컬럼 5의 셀은 1 또는 3 .. 다음 ... 가 ELSEIF 컬럼 5에서 모든 셀이 1 등을 포함 다른 경우에만, 다음 .. ...

A = FD (: 5); = 3 × 3 행렬

If A == 2 || A == 3 
    Avg = sum(diag(C)./sum(C+eps,2))/2; 
elseif A == 1 || A == 3 
    Avg = sum(diag(C)./sum(C+eps,2))/2; 
elseif A == 1 || A == 2 
    Avg = sum(diag(C)./sum(C+eps,2))/2; 
elseif A == 1 
    Avg = C(1,1)/sum(sum(C)); 
elseif A == 2 
    Avg = C(2,2)/sum(sum(C)); 
elseif A == 3 
    Avg = C(3,3)/sum(sum(C)); 
else 
    Avg = sum(diag(C)./sum(C,2))/3; 
end 

C 그러나, 전술 한 코드와 함께 오류가있다. ??? || 피연산자 & & 연산자는 논리 스칼라 값으로 변환 할 수 있어야합니다.

누구에게 도움을 줄 수 있습니까?

+1

어떤 오류가 발생합니까? 'A = FD (:, 5)'는 무엇을 의미합니까? (FD는 무엇입니까? 하나의 숫자 또는 벡터입니까?) 또한 첫 번째 2 개로 덮여 있기 때문에 마지막 4 개의 elseif 문에 도달하지 않는 것처럼 보입니다 ('A'가 1,2, 또는 3이면 다음 중 적어도 하나가 true가됩니다 :'A == 2 || A == 3' 및'elseif A == 1 || A == 3', 즉'elseif A == 1 ','elseif A == 2','elseif A == 3'는 절대로 도달하지 않을 것입니다 ... –

+0

@ mathematical.coffee, 그냥 질문을 편집했습니다. 예, elseif A == 1 ...에 도달 할 수 없습니다. ..so.. 어떻게 수정하겠습니까? – rock

+1

'all()'과'any()'를 사용하는 법을 배웁니다. – cyborg

답변

2

바로 가기 연산자는 스칼라 수량에만 적용됩니다. 지름길 연산자의 요점은 RHS가 필요하지 않는 한 평가되지 않는다는 것입니다. 그래서 다음과 같은 예에서 A==2 평가되지 않습니다 :

염두에두고
A = 1; 
I = A == 1 && A == 2 

, 다음은 어떻게해야합니까?

또한, 절에는 스칼라 조건이 있어야합니다. 이 코드는 어떻게해야합니까?

if [true false], disp('true'), else disp('false'), end 

당신은 아마 벡터 요소를 결합 all 또는 any를 원한다.

어쨌든 if-clause를 잘못 주문했다고 생각합니다. 시도해보십시오.

if all(A == 1) 
    Avg = C(1,1)/sum(sum(C)); 
elseif all(A == 2) 
    Avg = C(2,2)/sum(sum(C)); 
elseif all(A == 3) 
    Avg = C(3,3)/sum(sum(C)); 
elseIf all(A == 2 | A == 3) 
    Avg = sum(diag(C)./sum(C+eps,2))/2; 
elseif all(A == 1 | A == 3) 
    Avg = sum(diag(C)./sum(C+eps,2))/2; 
elseif all(A == 1 | A == 2) 
    Avg = sum(diag(C)./sum(C+eps,2))/2; 
else 
    Avg = sum(diag(C)./sum(C,2))/3; 
end 
+0

'I = A == 1 && A == 2'에서 두 번째 부분 인'A == 2'는 다음과 같습니다. '&&'(AND)에 대한 바로 가기 연산자는 첫 번째 인수가'false' 인 경우에만 작동하지만 두 번째 argu '(OR) 문이 평가되지 않은 첫 번째 문장은'I = A == 1 || '에서와 같이'true'로 평가됩니다. A == 2 '이다. – Kavka

+0

'A = [1 2]'인 경우'A == 1'은'true'이거나'false'입니까? – Nzbuu

+0

위의 내 주석은이 대답에 주어진 최상위 예제를 참조합니다. "다음 예제에서 'A == 2'는 평가되지 않습니다. 'A = 1; I = A == 1 && A == 2'. – Kavka

1

당신은 matlab에 배열에 대한 단락 회로 조작을 사용할 수 없습니다. 생각해 보면 상당히 논리적입니다. 단락 회로 연산자는 다른 피연산자에 관계없이 첫 번째 피연산자가 표현식을 참/거짓으로 만드는 경우 계산을 중지합니다. 그러나 이것은 벡터에서 사실 일 수 없다.

그래서 "|" "||"대신 "&" 및 "& &"

+0

@rock, 내 대답에 대해 찬성표를 던지고 도와 주시면 받아주세요. –

+0

감사합니다. .. 더 이상의 오류 .. 그러나, elseif A == 1 ... 도달 할 수 없습니다. – rock

관련 문제