3

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 に答える