我正在尝试使用python使函数适合一个实验的数据集。我可以得到一个非常好的近似值,拟合效果也很好,但是参数的误差非常高,我不确定如何修正。在
数据由时间数据集和y数据集组成。变量“ve”是一个线性速度函数,这就是为什么在代码中它被替换为“a*x+b”。现在拟合看起来很好,理论上函数应该拟合数据,但误差高得离谱。代码如下:import operator
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from lmfit import Model
from numpy import log, linspace, random
from matplotlib import colors as mcolors
from scipy.optimize import curve_fit
data6 = pd.read_csv('2594.csv')
x=data6.iloc[:18,0]
y=data6.iloc[:18,1]
def func(x, a, b, mo, q):
return (4.9+a*x+b)*x+(a*x+b)*((mo/q)-x)*log(1-(q*x)/mo)-0.5*9.8*x*x
popt, pcov = curve_fit(func,x,y,bounds=((0, -100, 0, 0), (1000, 1000, 1, 1)))
plt.plot(x, func(x, *popt), 'g--', label='fit: a=%5.3f, b=%5.3f, mo=%5