忽略循环中的警告并继续

时间:2012-12-07 14:47:56

标签: matlab solver

我有三个向量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

然而,有时候,解决方案无法获得,这会导致错误消息“警告:无法找到明确的解决方案”。我对此感到满意,但如果我遇到一个无法解决的等式,我想简单地让“exponents(i)”保持不变,继续进行下一次迭代,而不是让我的代码突然停止。有什么建议吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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,但海报出错了。