2012-01-28 9 views
1

matlab consoleでダブルデータを表示する際に問題が発生しています。実際には、データファイルから行列をインポートしています。特定の行と列の値は1.543でしたが、disp(x)を使用したときのコンソールでは、xがインポートされたマトリックスで、1.0e+03 * 0.0002と表示されています。しかし、disp(x(25,25))を使用して行列のその特定の要素にアクセスしようとすると、と25が行番号と列番号になり、1.543と表示されます。だから私は混乱している。任意の説明。行列全体を印刷すると、1.0e+03 * 0.0002と表示されます。double値を表示する際の問題

答えて

2

次のコマンドで修正する必要があります。これは表示上の問題であり、マトリックス内の実際の値の精度は影響を受けません。

format shortG 
2

これは、データのダイナミックレンジが大きいために発生します。 例えば試してみてください。

x = [10^-10 10^10]; 
disp(x); 

結果は次のとおりです。

1.0E + 010 *
0.0000 1.0000

それが第1の値がゼロであるように見えますが、それそうではありません。それは第2のものに比べてほぼゼロです。それは驚くべきことではない。大きな値に小さな値を加えて、減算してゼロになるようにしてください。それが原因浮動小数点にarithmetic.The次の式は、何をtrue

isequal((x(1)+x(2)) - x(2) , 0) 

を行うことができますされていますか?

1)非常に高いダイナミックレンジは、あらゆる種類の計算で問題を引き起こす可能性があります。どこから来たのかを理解し、より広い意味で問題を解決してください。

2)。あなたはそれが状況例いくつかのために、視覚的にを向上させることができます

format long 

を設定してみてください。