import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit#用python拟合函数最主要模块就是cure_fit
#准备数据
x=[804.49,830.16,856.38,883.14,910.45,938.32]
y=[-794.7288537,-806.2815501,-815.3286848,-822.0758913,-827.6503565,-830.2472723]
#定义你自己想要拟合的函数
def func(x,E0,B0,B1,V0):
return E0+(9.0/16)*V0*B0*(((V0/x)**(2.0/3)-1)**(3.0)*B1)+(9.0/16)*V0*B0*((V0/x)**(2.0/3)-1)**(2.0)*(6-4*(V0/x)**(2.0/3))
#定义好自己需要的函数之后就是拟合
#popt是一个一维数组,表示得到的拟合方程的参数
#pcov是一个二维数组,是在popt参数下得到的协方差
popt,pcov=curve_fit(func,x,y,[-800,-1,-1,930]) #后面这个数组是进行设置初猜,即使初猜设置的不是特别好,也能拟合出来比较理想的效果。如果你不设置初猜的话,默认的都是1
print(popt)
E0=popt[0]
B0=popt[1]
B1=popt[2]
V0=popt[3]
print(pcov)
yval=func(x,E0,B0,B1,V0)#拟合完参数之后 就用拟合之后的参数来计算函数的值,即得到拟合拟合曲线的数值
plt.scatter(x,y)#原始数据画图
plt.plot(x,yval,'g',label='E0=%5.3f,B0=%5.3f,B1=%5.3f,V0=%5.3f'%tuple(popt))#拟合之后的数据画图 tuple是把列表变成元组
plt.legend()
plt.show()
来源:https://www.cnblogs.com/shunguo/p/11397030.html