2016-08-17 7 views
1

У меня проблемы с точностью Matlab's erf/erfc функции.проблемы с функцией erf/erfc в matlab

Как известно, erf(x) равен 1, если x - бесконечность.

Однако, в Matlab, я удивлен, что erf(6) уже равен 1 и 6 даже не значительно большим!

erfc(x) немного лучше в том, что erfc(27) отличное от нуля, тогда как erfc(28) равно нулю.

Есть ли способ улучшить числовые характеристики этой функции? I.e., увеличьте диапазон значений для erf(x), чтобы получить значение, которое не является точно 1? (а также 0 для erfc?)

+1

Сколько цифр точности вам нужно? erf предоставляет 15 цифр, erfc переходит на 'e-300'. Если вам нужна более высокая точность, вы, вероятно, используете функцию неправильно – Trogdor

+0

У вас есть причина требовать такой точности при больших значениях аргумента? –

ответ

1

Ваша сделка с double precision floating point. erfc выполняет по-разному, потому что значения более близко расположены вокруг 0, чем 1. Вам нужно представить свои значения с помощью другой системы счисления, если вам действительно нужна более высокая точность (мне непонятно, почему бы вам). Попробуйте использовать variable precision arithmetic, если у вас есть набор инструментов Symbolic Math. Попробуйте

erf(vpa(6)) 

, который возвращает символическое значение 0.99999999999999997848026328750109. Вы должны будете использовать digits, поскольку аргумент становится больше. И, конечно, если вы преобразуете результаты обратно в плавающую точку с double, вы потеряете всю дополнительную точность.

+0

К сожалению, мне нужно использовать вывод erf/erfc для оптимизации. Мне действительно нужно взять журнал erfc. Если значение erfc равно 0, алгоритм оптимизации не будет работать. – user1237300

+2

@ user1237300 В этом случае вы можете посмотреть на экспоненциально масштабированную функцию дополнительной ошибки 'erfcx'. – njuffa

+0

@njuffa Правильно. Попробуйте 'x = 30;' 'log (erfcx (x)) - x.^2' реализовать' log (erfc (x)) '. Вы можете проверить результат с помощью 'double (log (erfc (vpa (30))))'. – horchler

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

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