2012-12-07 3 views
3

세 개의 벡터 A, B 및 C가 있습니다.이 벡터의 각 값에 대해 방정식 C^x = A^x + B^x를 풀고 싶습니다. 불행히도 이것은 반복적으로 만 풀 수있는 방정식이므로 MATLAB의 "solve"함수를 사용하여 각 경우에 대한 솔루션을 찾으려고합니다.루프에서 경고를 무시하고 계속

때때로
exponents = zeros(100,1); 

syms x 

A = rand(100,1); 
B = rand(100,1); 
C = rand(100,1); 

for i = 1:100 

exponents(i) = eval(solve(C(i)^x == A(i)^x + B(i)^x)); 

end 

그러나,이 솔루션은 오류 메시지에 이르게하는 얻을 수없는 것입니다, 다음과 같이 내 코드는 "경고 :. 명시 솔루션을 찾을 수 없습니다" 나는 괜찮습니다. 그러나 해결할 수없는 방정식을 만나면, 코드를 갑작스럽게 멈추지 않고 단순히 "지수 (i)"를 그대로 두어 다음 반복문으로 옮기고 싶습니다. 어떤 제안?

답변

1

try/catch 문 내에 가끔 오류가 발생하는 명령문을 넣으면 오류로 인해 실행이 중지되지 않습니다. 예를 들어 다음과 같이 시도 할 수 있습니다.

for i = 1:100 
    try 
    exponents(i) = eval(solve(C(i)^x == A(i)^x + B(i)^x)); 
    catch 
    exponents(i) = NaN; 
    end; 
end 
+0

예, 문제는 경고이지만 오류는 아닙니다. – HebeleHododo

+0

사실 그건 내 실수 였어. "경고"와 "오류"의 명칭 차이가 있다는 것을 몰랐다. 이것은 내 문제를 완벽하게 해결했다. 고맙습니다! –

0

MATLAB에서 경고를 잡기위한 직접적인 방법은 없습니다 (최소한 문서화 된 방법). 조금이라도 우아하지는 않습니다. 못생긴 것이 아니라면, lastwarn의 출력을 폴링해볼 수 있습니다.

... 
exponents(i) = eval(solve(C(i)^x == A(i)^x + B(i)^x)); 
[~, msgid] = lastwarn; 
if strcmp(msgid, YOURWARNINGID) 
    continue; 
end 

포스터에 오류가 발생한다는 점을 제외하면 here과 비슷한 게시물이 있습니다.

관련 문제