2017-03-19 20 views
0

私はScilabを教育目的で学習しています。Scilabでこの等価性がFalseを返すのはなぜですか?

Gaussian Eliminationを扱う場合、Ax = bとなります。 "A"は線形方程式からの係数を有するマトリックスであり、 "x"は変数を有するベクトルであり、 "b"は線形システムからの "解"を有するベクトルである。

のは、Aがあるとしましょう:

10. - 7.  0. 
    - 3.  2.09 6. 
    5. - 1.  5. 

とBは次のとおりです。

- 3.109D-14 
    - 1.   
    1. 

OBS:

Scilabの内部ガウスの消去を使用して
7.  
3.91 
6. 

、私たちのように、xの値を取得: - 3.109D-14はゼロに近い数値です。

私は* xとして行列の乗算を行うと、私はベクトル「B」と同じ構成要素を持つ3×1ベクトルを取得:

enter image description here

は最後に、私の疑いがある:* xがある場合"b"と同じ値、Scilabで平等なベローがFalseを返すのはなぜですか?

enter image description here

+1

[の可能性の重複が浮いている小数点演算:mprintf("x= %.30f", x(1));

は結果を見て、非常に小さなentiesラウンド0しようとする、つまり、あなたがcleanにあなたの配列を試すことができ、この問題を回避するために、壊れて?](http://stackoverflow.com/questions/588004/is-floating-point-math-broken) – FTP

答えて

1

それは彼のコメントに正常ヒトによって示されるように、おそらく丸め誤差によるもので、浮動小数点演算の固有の限界。

覚えておくべきもう1つのこと:Scilabコンソールは丸い値を出力するので、明示的に尋ねられない限り、内部的には表示されない小数点以下が表示されます。

A*clean(x)==b 
関連する問題