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)”不变并进入下一个迭代,而不是让我的代码突然停止。有什么建议么?

4

2 回答 2

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
于 2012-12-07T17:51:15.670 回答
0

MATLAB 中没有直接的方法来捕获警告(至少有记录的方法)。一点都不优雅,如果不丑,你可以试试轮询lastwarn.

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

这里有一个类似的帖子,除了海报出现错误。

于 2012-12-07T15:49:14.567 回答