2012-12-07 27 views
3

我有三個向量A,B和C.對於這些向量中的每個值,我想要求解方程C^x = A^x + B^x。不幸的是,這是一個我發現只能迭代求解的方程,所以我試圖用MATLAB的「求解」函數爲每個案例找到解決方案。我的代碼如下:忽略循環中的警告並繼續

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,除了海報出現錯誤。