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

 Réponse acceptée

Hernia Baby
Hernia Baby le 16 Fév 2022
Modifié(e) : Hernia Baby le 16 Fév 2022

1 vote

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

4 commentaires

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

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur 一般分野への適用 dans Centre d'aide et File Exchange

Produits

Version

R2015a

Community Treasure Hunt

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

Start Hunting!