我试着用正弦函数来确定一个点的读数.
你可以在图像上看到结果并不令人满意.
我不能设法调整curve_fit
的各种参数来很好地适应函数.我能做些什么来提高我的成绩?
from scipy.optimize import curve_fit as cf
import numpy as np
from matplotlib import pyplot as plt
xdata = np.array([0. , 0.02, 0.04, 0.06, 0.08, 0.1 , 0.12, 0.14, 0.16, 0.18, 0.2 ,
0.22, 0.24, 0.26, 0.28, 0.3 , 0.32, 0.34, 0.36, 0.38, 0.4 , 0.42,
0.44, 0.46, 0.48, 0.5 , 0.52, 0.54, 0.56, 0.58, 0.6 , 0.62, 0.64,
0.66, 0.68, 0.7 , 0.72, 0.74, 0.76, 0.78, 0.8 , 0.82, 0.84, 0.86,
0.88, 0.9 , 0.92, 0.94, 0.96, 0.98, 1. , 1.02, 1.04, 1.06, 1.08,
1.1 , 1.12])
ydata = np.array([37.5, 36.4, 37.1, 37.3, 38.2, 38.4, 38.1, 36.7, 34.3, 32.2, 33.1,
31.8, 33.4, 35.7, 37.8, 38.3, 38.1, 37. , 34.9, 32.5, 31.6, 31.7,
33.5, 35.5, 37.8, 38.4, 38.3, 36.9, 34.8, 32.2, 33.9, 31.6, 33.3,
35.5, 37.6, 38.3, 38.2, 36.7, 34.8, 32.4, 31.5, 32.1, 33.3, 35.5,
37.2, 38.3, 38.3, 36.8, 34.5, 32.3, 31.6, 31.8, 33.3, 35.7, 37.8,
38.4, 38.2])
def sin_fun(x,a,b,c,d):
return a*np.sin(b*x+c)+d
p_opt,p_cov=cf(sin_fun,xdata,ydata )
print(p_opt)
plt.plot(xdata,sin_fun(xdata,*p_opt))
plt.plot(xdata,ydata, 'r')
plt.show()