2016-06-11 7 views
0

Один из моих друзей спросил меня, почему простые эквивалентные формулы получают разные результаты. Извините, что код немного длинный, но интересная часть - это только строки 99 и 100. Вот formulas и code. Я проверил код. Проблема в том, где 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' являются положительными. поэтому нет мнимой части. И при расчете журнала ошибки округления влияют только на некоторые специальные значения, то есть числа, приблизительно равные нулю или одному (где вы должны использовать 'log1p'). – eulerleibniz

 Смежные вопросы

  • Нет связанных вопросов^_^