Используя scipy.optimize.curve_fit, я не могу правильно подобрать функцию V * cos (ω * t) - PullRequest
0 голосов
/ 17 апреля 2020

Я создал данные из функции в python, поэтому я подумал, что подгонка должна быть идеальной, но это не так, я не знаю почему

import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit 

def fun(offset, V, f, phi):
        return V * np.cos(2*np.pi*f * x + phi) + offset

    xData = np.arange(0, 1, 0.005) #time
    f = 2 #frequency
    yData = 5 * np.cos(2*np.pi*f * x)

    popt, pcov = curve_fit(fun, xData, yData, p0=[1, 1, 1])

    print(popt)

    plt.scatter(xData, yData, label="data")
    plt.plot(xData, fun(x, *popt), label="fit")
    plt.legend(loc = "upper right")
    plt.show()

построенные данные и точки соответствия

1 Ответ

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

Было несколько проблем, включая определение вашей функции и первоначальное предположение. Это работает:

import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit 

def fun(xData, offset, V, f, phi):
        return V * np.cos(2*np.pi*f * xData + phi) + offset

xData = np.arange(0, 1, 0.005) #time
f = 2 #frequency
yData = 5 * np.cos(2*np.pi*f * xData)

popt, pcov = curve_fit(fun, xData, yData, p0=[0, 6, 2, 1])

print(popt)

plt.scatter(xData, yData, label="data", c='k')
plt.plot(xData, fun(xData, *popt), label="fit", c='r')
plt.legend(loc = "upper right")
plt.show()

enter image description here

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