MATLABとSimulinkの演算違い

MATLAB上で16桁の少数を用いた計算結果とSimulinkで同様の計算をした結果が細かい桁で異なりました。このようは原因は、計算ミス以外になにがあるのでしょうか。また、SimulinkでDisplayブロックを使用して、演算結果をlong型で表示させてみると17桁になる時があります。こちらも疑問です。

 採用された回答

Hernia Baby
Hernia Baby 2022 年 2 月 16 日
編集済み: Hernia Baby 2022 年 2 月 16 日

1 投票

おそらく浮動小数点の演算による誤差かと思われます。 参考 全く同じコードで異なるPCを使うと全く違う結果が出る

4 件のコメント

taka
taka 2022 年 2 月 16 日
同じPC内にある、MATLABとSimulinkでも異なってくるということでしょうか?
Hernia Baby
Hernia Baby 2022 年 2 月 17 日
どのような計算かわからないので明言はできませんが、その認識です。
16桁の少数を用いた計算とのことなので誤差が生じる可能性は高いです。
浮動小数点を利用する際に知っておきたいこと の 小数計算を行う場合の設計・プログラミング方針 をご参考ください。まあ要は有効桁数があるよってことです。
出力するデータ型によっても誤差は生じます。以下が非常に参考になります。
浮動小数点相対精度については eps をご参考ください。
Toshinobu Shintai
Toshinobu Shintai 2022 年 2 月 17 日
編集済み: Toshinobu Shintai 2022 年 2 月 17 日
横から失礼します。
とても平たく言いますと、MATLABとSimulinkではコンパイラが異なります。コンパイラが変わると、数学的には同じ計算を行うコードでも、機械語に変換された段階で計算順序が変わる場合があります。
計算順序が変わると、情報落ちや桁落ちが発生し得る浮動小数点数の計算結果は変化します。
Atsushi Ueno
Atsushi Ueno 2022 年 2 月 17 日
反対方向から失礼します。私はSimulinkの後ろでMATLABが動いてるのだと思っていました。
もう少し細かく言いますと、こういう事でしょうか
  • MATLABコードはインタプリタで動作
  • Coder系Toolboxは専用のコンパイラでコードや実行ファイルを生成
  • SimulinkモデルもSimulink用のコンパイラで実行ファイルを生成
あと何らかの浮動小数点演算(例: mtimes(*)関数とProductブロック)を挙げても、その内部で動くプログラムは異なるもので、同じ演算内容だからたまたま結果が合致したり、同じ演算でもロジックの違いにより結果が異なったりする、という事なのでしょうか?

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File Exchange一般分野への適用 についてさらに検索

製品

リリース

R2015a

質問済み:

2022 年 2 月 16 日

コメント済み:

2022 年 2 月 17 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!