2016-06-11 10 views
0

私の友人の一人が、なぜ簡単な等価式が異なる結果をもたらすか尋ねました。コードは少し長いですが、興味深い部分は99行と100行だけです。ここにはformulascodeがあります。 コードを確認しました。問題はf = 1です。 問題は99行と100行です。コードを実行するのに約10秒かかります。 ガイドまたはコメントありがとうございました。等価式はMATLABで異なる結果を示します

答えて

1

シンプルです。これは丸め誤差のためです。あなたがコメントアウトされていることはそう、fplus~=1を行い、エラーオフいくつかのラウンドを持っています

E = log((1 - 1")/1) >= log(eps) >= -36.0437. 

実際の値がされるべきである:

E = log((1 - 1)/1) = log(0) = -Inf 
+0

だからここに簡略化した形が良いです。それは 'log'の虚数部の問題ですか?また、丸め誤差のため。 – Abolfazl

+0

@Abolfazlのコードでは、 'fminus'と' fplus'の両方が正です。虚数部はありません。そして、ログを計算するとき、丸め誤差はいくつかの特殊な値にのみ影響します。つまり、数値はほぼ0または1になります( 'log1p'を使うべきです)。 – eulerleibniz

関連する問題