Curve_fit реальных и мнимых данных - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть массив x-данных длины 640 с просто реальными данными и массив y-данных длины 640, где каждое значение имеет действительную и мнимую часть. Я использовал код в этом ответе , где я определяю yBoth как:

yBoth = np.hstack([np.real(ydata),  np.imag(ydata)])

, где np.real(ydata) и np.imag(ydata) оба имеют длину 640 при выполнении:

from scipy.optimize import curve_fit
import numpy as np
def drag_fit_func(x, A, S, t, B):
    return A*np.exp(((x - t/2)/2*S)**2) + 1j*B*(A*((x - t/2)/S**2)*np.exp(((x - t/2)/2*S)**2))

def funcBoth(x, A, S, t, B):
    N = len(x)
    x_real = x[:N//2]
    x_imag = x[N//2:]
    y_real = np.real(drag_fit_func(x_real, A, S, t, B))
    y_imag = np.imag(drag_fit_func(x_imag, A, S, t, B))
    return np.hstack([y_real, y_imag])

yBoth = np.hstack([np.real(ydata),  np.imag(ydata)])
poptBoth, pcovBoth = curve_fit(funcBoth, xdata, yBoth)

print(poptBoth) 

Я получил эту ошибку:

ValueError: operands could not be broadcast together with shapes (640,) (1280,)

Как мне решить эту проблему?

И спасибо.

1 Ответ

0 голосов
/ 18 апреля 2020

ISTM Проблема наименьших квадратов заключается в том, что вы одновременно подгоняете действительные и мнимые части данных к действительным и воображаемым частям функции модели. (Возможно), самый прямой способ - это использовать наименьшие квадраты и предоставить функцию стоимости, которая возвращает массив невязок.

РЕДАКТИРОВАТЬ: вот почти дубликат: Наименьших квадратов в системе уравнений с оптимизацией .leastsq () (Python)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...