4

Matlab ソフトウェアの異なる実行結果を同じ入力で比較すると、問題が発生します。問題を絞り込むために、次のことを行いました。

  • Matlab の save() メソッドを使用して、関連するすべての変数を保存します
  • 何かを計算するメソッドを呼び出す
  • save() を使用して、関連するすべての出力変数を再度保存します

呼び出されたメソッドを変更せずに、別の実行を行いました

  • 上記で保存した変数をロードし、isequal() を使用して現在の入力変数と比較します
  • 現在の入力変数を使用してメソッドを再度呼び出す
  • 上記で保存した out 変数を読み込んで比較します。

最後の「行」の比較でわずかな違いが検出されるとは信じられません。計算には単精度と倍精度の数値が含まれ、誤差は 1e-10 の大きさです (出力は倍精度の数値です)。

私が想像できる唯一の説明は、変数を保存するときにMatlabがいくらかの精度を失うことです(私は非常にありそうにないと思います、私はデフォルトのバイナリMatlab形式を使用します)、またはa = b + c + dのような計算が含まれている可能性がありますa=(b+c)+d または a=b+(c+d) として計算され、数値の違いにつながる可能性があります。

上記の観察の理由が何であるか知っていますか?

どうもありがとう!

4

3 に答える 3

1

それは実際には、計算でのシングル/ダブル ミックスが原因のようです。倍精度のみに切り替えたため、問題は発生しなくなりました。皆さんの考えに感謝します。

于 2010-09-01T06:45:58.247 に答える
0

これらは丸め誤差である可能性があります。次のように、システムの浮動小数点精度を見つけることができます。

>> eps('single')

ans =

  1.1921e-07

私のシステムでは、これはあなたの注文の不一致を説明する10^-7を報告します

于 2010-08-31T12:49:08.583 に答える
0

再現可能な結果を​​確保するには、特にランダム生成関数を (直接的または間接的に) 使用している場合は、各実行の開始時に同じ状態を復元する必要があります。

%# save state (do this once)
defaultStream = RandStream.getDefaultStream;
savedState = defaultStream.State;
save rndStream.mat savedState

%# load state (do this at before each run)
load rndStream.mat savedState
defaultStream = RandStream.getDefaultStream();
defaultStream.State = savedState;
于 2010-08-31T14:58:00.957 に答える