Допустим, у меня есть следующие данные
data = np.array([0.405, 0.120, 0.093, 0.193, 0.513, 0.780, 0.980, 0.911, 0.681])
, полученные из эксперимента в следующие моменты времени
time = np.array([0, 0.35, 0.7, 1.05, 1.4, 1.75, 2.1, 2.45, 2.8])
Я хочу подогнать их в Python 3.7 с в квадратефункция sine , использующая функцию curve_fit из scipy.optimize:
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
function = lambda t, f: np.sin(f * t) ** 2
Меня интересует только частота функции, поэтому у меня есть только один параметр(вместе с т).Ожидается, что амплитуда будет от 0 до 1. Я выполнил подгонку следующим образом
p, c = curve_fit(function, time, data)
plt.figure()
plt.scatter(time, data)
plt.plot(time, function(time, p))
, получив график: Fit_and_data
Однако, как вы можете видеть изНа картинке подгонка начинается в точке (0,0), поэтому не напоминает данные.Установленная частота действительно сильно отличается от ожидаемой.
Я хотел бы найти способ, чтобы согласование началось вокруг первой точки данных, а не всегда в начале координат.Это возможно?
Я также знаю, что curve_fit принимает также предположение для подгоночных параметров, но я не понимаю, как это может изменить мои результаты.Спасибо