Я пытаюсь подогнать функцию, используя пакет Scipy
с ортогональной регрессией расстояния (odr), и постоянно получаю следующую ошибку:
"RuntimeWarning: invalid value encountered in power"
это произошло, когда я использовал scipy
Это функция curve_fit, но я всегда мог спокойно проигнорировать предупреждение.Но теперь кажется, что это вызывает числовую ошибку, которая останавливает примерку.Мой код основан на примере, который я нашел здесь:
Пример python scipy.odrpack.odr (с примером ввода / вывода)?
Вот мой код:
import numpy as np
import scipy.odr.odrpack as odrpack
def divergence(x,xDiv):
return ( 1 - (x/xDiv) )**( -2.4 )
xValues = np.linspace(.25,.37,12)
yValues = np.array([ 6.94970607, 9.12475506, 10.65969954, 12.30241672,
14.44154148, 16.00261267, 19.98693664, 25.93076421,
30.89483997, 35.27106466, 50.81645983, 68.06009144])
xErrors = .0005*np.ones(len(xValues))
yErrors = np.array([ 0.31905094, 0.37956865, 0.24837562, 0.68320078, 1.25915789,
1.40241088, 0.33305157, 1.37165251, 0.32658393, 0.52253429,
1.04506858, 1.30633573])
wcModel = odrpack.Model(divergence)
mydata = odrpack.RealData(xValues, yValues, sx=xErrors, sy=yErrors)
myodr = odrpack.ODR(mydata, wcModel, beta0=[.8])
myoutput = myodr.run()
myoutput.pprint()
Из предыдущих вопросов об этой ошибке я обнаружил здесь:
NumPy, RuntimeWarning: недопустимое значение, обнаруженное при включении питания
Iподозревал, что проблема в том, что я поднимаю отрицательное значение до степени дробного значения.Но то, что я поднимаю до степени -2.4 (1-x/xDiv)
, не является отрицательным (по крайней мере, при первоначальном предположении xDiv=.8
).Но когда я пытаюсь сделать свои значения y сложного типа, я получаю новую ошибку:
"ValueError: y could not be made into a suitable array"
из строки с командой
myoutput = myodr.run().
Единственные примеры, которые я могу найти, этоиспользовать этот пакет odr, подходят для полиномов, так что я подозреваю, что это может быть проблемой?