如何使用leastsq拟合此多项式?目的是从实验和分析值中获得优化的图表:
from scipy.integrate import quad
import pylab as py
import numpy as np
x_data=[329.74403, 329.21733, 328.73927, 328.25111, 327.75969, 327.26852,
326.7746,326.28142, 325.78471,325.28635,324.78976]
y_data=[]
y1_data=[1.55e-06, 1.82e-06, 1.93e-06, 1.17e-06, 1.93e-06, 1.79e-06, 1.31e-
06, 1.75e-06,1.68e-06,1.39e-06, 1.69e-06]
Tavg = sum(x_data)/len(x_data)
B=0.33
m0 = 1.0
st = 0.1 * Tavg
def p(Tc):
return 1.0/(np.sqrt(2.0*np.pi)*st)*np.exp(-((Tc-
Tavg)**2.0)/(2.0*st**2.0))
def F(Tc, Ti):
if (Tc-Ti) <0:
return 0
else:
return ((Tc-Ti)/Tc)**B*p(Tc)
def M(t):
for Ti in x_data:
k = quad(F, 0.0, 2000.0, args=(Ti,))[0]
y_data.append(k*m0)
#graph of temperature vs analytical is done here
def plt():
py.xlabel('Temperature')
py.ylabel('Magnetisation')
py.plot(x_data,y_data)
py.savefig('graf.png')
我需要找到一个使用leastsq优化的图表,它可以最小化分析值和实验值之间的误差。我在线查看了最少的例子,但我很难理解并将其应用到我的代码中。欢迎任何帮助和见解。
答案 0 :(得分:-1)
您可以使用numpy.polyfit
进行拟合,使用numpy.polyval
来绘制数据。
coefficients = numpy.polyfit(x_data, y_data, degree)
fitted_data = numpy.polyval(coefficients, x_data)
生成并绘制一些看起来像股票价格数据的随机数据:
from pylab import *
data = 10 + np.cumsum(np.random.normal(0.1, 0.1, size=100))
plot(data); grid(True); show()
你得到这样的东西:
然后,进行拟合(得到近似数据的多项式的系数)和要绘制的数据(评估由你得到的系数给出的多项式):
X = np.arange(0, data.size)
coeff = np.polyfit(X, data, 5)
Y_fitted = np.polyval(coeff, X)
plot(Y_fitted); grid(True); show()
结果如下:
但要看到np.polyfit
的力量,我们还需要一个图表:原始数据(橙色)与多项式(蓝色):
正如您所看到的,在这个具体的时间间隔内,多项式非常接近您的数据,并且多项式的次数越高,近似值就越好。