Один из моих друзей спросил меня, почему простые эквивалентные формулы получают разные результаты. Извините, что код немного длинный, но интересная часть - это только строки 99 и 100. Вот formulas и code. Я проверил код. Проблема в том, где f = 1
. Проблема заключается в линии 99 и 100. Для запуска кода требуется около 10 с. Спасибо за любое руководство или комментарий.Эквивалентные формулы дают разные результаты в MATLAB
0
A
ответ
1
Простой. Это просто из-за ошибок округления. То, что вы закомментирована имеет некоторые ошибки округления, что делает fplus~=1
, так:
E = log((1 - 1")/1) >= log(eps) >= -36.0437.
в то время как реальное значение должно быть:
E = log((1 - 1)/1) = log(0) = -Inf
Так вот упрощенная форма лучше. Дозировать это дело 'log' показать мнимую часть? Его также для ошибки округления. – Abolfazl
@Abolfazl в вашем коде, как 'fminus', так и' fplus' являются положительными. поэтому нет мнимой части. И при расчете журнала ошибки округления влияют только на некоторые специальные значения, то есть числа, приблизительно равные нулю или одному (где вы должны использовать 'log1p'). – eulerleibniz