Я использую Matlab. У меня есть функция f(x)
, и я хочу применить f(x)
к набору значений. Итак, я написал 2 кода. Первый код простой для l oop. В какой-то момент x0
, внутри этого для l oop, я обнаружил, что f(x0)=1.0000
, а затем я использую f(x0)-1=-4.7684e-07
.
Мой второй код использует arrayfun
на f(x)
. И при том же входном значении x0
я обнаружил, что результат равен 1.0000
, но arrayfun(f,x0)-1=4.7684e-07
!
Эта ошибка 4.7684e-07
выглядит крошечной. Но for l oop дает мне число ниже 1, а arrayfun
дает мне число выше 1. Это действительно большая разница в моей работе, поскольку мои последующие вычисления в значительной степени зависят от того, меньше это число или меньше 1 1, так как это число должно быть вероятностью.
Теперь мой вопрос: почему у arrayfun
такая проблема? В моем коде нет случайных чисел, почему arrayfun
дает другой результат, чем для l oop? кому я должен доверять? Есть ли способ избежать такой точности? Обратите внимание, что в этом коде все мои переменные имеют тип single
. Это вызывает проблему?