Проблема: у меня есть набор измерений (время, измерение, ошибка), которые демонстрируют периодические изменения, и я хочу сопоставить их с рядом Фурье формы
где A0 — среднее значение моих измерений, t — время, t0 — (известное) контрольное время, а P — (известный) период. Я хочу подобрать коэффициенты A_k и phi_k.
Вот что у меня есть на данный момент:
# Find Fourier components
# nfourier is the number of fourier components
def fourier(coeffs, time_data, epoch, period, nfourier, A0):
import numpy as np
omega = 2.0*np.pi/period
fseries = np.zeros(len(time_data))
fseries.fill(A0)
for k in range(nfourier):
ak = coeffs[k]
phik = coeffs[k+1]
time_diff = time_data - epoch
fseries = fseries + ak * np.cos(k * omega * time_diff + phik)
return fseries
Я оцениваю остатки следующим образом:
def residuals(coeffs, measurement_data, time_data, error_data, epoch, period, nfourier, A0):
model = fourier(coeffs, time_data, epoch, period, nfourier, A0)
result = measurement_data - model
return result
Затем я сопоставляю это с:
def fit_it(coeffs, measurement_data, time_data, error_data, epoch, period, nfourier, A0):
from scipy.optimize import leastsq
opt_coeff = leastsq(residuals, coeffs, args=(measurement_data, time_data, error_data, epoch, period, nfourier, A0))
return opt_coeff
Программа завершается успешно, но подгонка не удалась, как видно из этого рисунка:
Я не уверен, что я делаю неправильно здесь, но, возможно, эксперт может дать несколько советов. Я был бы рад предоставить тестовый набор данных, если кто-то готов помочь.
cos()
фактором? должно быть проще. Трудно понять код, который вы используете - person Nikos M.   schedule 18.12.2015nfourier
, например, с 2 на 3 и выполнив метод наименьших квадратов, первые 2 коэффициентаnfourier
3 НЕ будут соответствовать первым 2 коэффициентамnfourier
2 (хотя они должны совпадать). Опять же, если я правильно понимаю код до сих пор - person Nikos M.   schedule 19.12.2015