我需要用非线性平差来确定范德华方程中a和b的值。我对科学一无所知。我发现了scipy.optimize.curve\u fit曲线拟合用最小二乘法进行非线性调整,但我不确定我是否用对了。我已经查过了,但找不到能改变它的东西。你知道吗
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
r = 8.314472
t = 273
data = pd.read_excel("gases_data.xls", skiprows=2)
pressure = np.array(data.get(data.columns[0]))
hydrogen = np.array(data.get(data.columns[1]))
nitrogen = np.array(data.get(data.columns[3]))
def ff(L, a, b):
return (r*t)/(L - b) - (a/L**2)
pfit, perr = curve_fit(ff,hydrogen,pressure)
y_fit = ff(hydrogen, *pfit)
plt.plot(hydrogen, pressure, "ro", label = "data")
plt.plot(hydrogen, y_fit, "b", label = "fit")
plt.text(10, 3, "a = " + str(pfit[0]) + "\nb = " + str(pfit[1]))
plt.legend()
plt.grid(True)
plt.show()
vanderwaals不是直线
curve_fit
的最佳函数。尝试增加传递给函数的参数(例如,创建雅可比矩阵并添加边界)相关问题 更多 >
编程相关推荐