import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit#用python擬合函數最主要模塊就是cure_fit
#准備數據
x=[一組數據]
y=[一組數據]
#定義你自己想要擬合的函數
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()