Scipy Optimize Curve tidak pas dengan data sebenarnya
Nov 04 2020
Saya mencoba menyesuaikan fungsi eksponensial yang membusuk dengan data dunia nyata. Saya mengalami masalah saat menyelaraskan fungsi dengan data aktual.
Ini kode saya:
def test_func(x, a, b, c):
return a*np.exp(-b*x)*np.sin(c*x)
my_time = np.linspace(0,2.5e-6,25000)
p0 = [60000, 700000, 2841842]
params, params_covariance = curve_fit(test_func, my_time, my_amp,p0)
Sinyal saya dan fungsi yang dipasang
Pertanyaan saya: mengapa fungsi yang dipasang tidak dimulai di mana data saya mulai meningkat dalam amplitudo?
Jawaban
Mr.T Nov 04 2020 at 03:50
Seperti yang saya katakan dalam komentar saya, masalahnya adalah fungsi Anda tidak memperhitungkan bahwa kurva eksponensial dapat digeser. Jika Anda menyertakan pergeseran ini sebagai parameter tambahan, kecocokan mungkin akan bertemu.
from scipy.optimize import curve_fit
from matplotlib import pyplot as plt
import numpy as np
def test_func(x, a, b, c, d):
return a*np.exp(-b*(x+d))*np.sin(c*(x+d))
my_time = np.linspace(0,2.5e-6,25000)
#generate fake data
testp0 = [66372, 765189, 2841842, -1.23e-7]
test_amp = test_func(my_time, *testp0)
my_amp = test_func(my_time, *testp0)
my_amp[:2222] = my_amp[2222]
p0 = [600, 700000, 2000, -2e-7]
params, params_covariance = curve_fit(test_func, my_time, test_amp, p0)
print(params)
fit_amp = test_func(my_time, *params)
plt.plot(my_time, my_amp, label="data")
plt.plot(my_time, fit_amp, label="fit")
plt.legend()
plt.show()
Keluaran sampel
Kiat Pemilik Anjing yang Bermanfaat: Mengapa Penting untuk Membiarkan Anjing Anda Mengendus di Jalan
Jana Duggar: Semua yang Dia Katakan Tentang Cinta dan Jendela 5 Tahunnya untuk Menemukan 'Yang Satu'