Подгонка данных со сложной функцией в python

1

У меня есть некоторые данные, которые я пытаюсь согласовать с моделью

Здесь соответствующая часть моего кода

path='D:/ParPhy/2-BESIII15_new.dat'
data = pd.read_table(path,header=None)
y=np.array(data[1])
x=np.array(data[0]**(1/2))
s=x**2
def F_w(s,alpha,m_p,gamma_p):
    P_s=1+alpha*s
    A=-m_p**2
    B=complex(s-m_p**2,m_p*gamma_p)
    return abs(P_s*A/B)**2
popt, pcov = curve_fit(F_w, x, y)

и я продолжаю получать ошибку типа:

"только массивы длины 1 могут быть преобразованы в скаляры Python" о "файле" D: /PYTHON/Particle Physics/fit_2.py ", строка 31, в F_w B = complex (s-m_p ** 2, m_p * gamma_p) "

Любая помощь будет принята с благодарностью.

  • 0
    complex - это функция Python, которая принимает 2 числа и возвращает комплексное число. Эквивалент массива Numpy будет np.array([1,2,3]) + 1j * np.array([3,4,5])
Теги:
scipy
curve-fitting
data-fitting
least-squares

1 ответ

0

Функциональный complex получает скаляр, и вы передаете пустой массив. Вы должны применить complex функцию к каждому элементу массивов следующим образом:

B = np.zeros(m_p.size, dtype=np.complex)
for i in range(m_p.size):
    B[i] = complex(x[i], y[i])

Ещё вопросы

Сообщество Overcoder
Наверх
Меню