如何解决指数拟合返回不合理的振幅,但绘制时看起来不错
我正在尝试拟合我的指数数据,但无法获得一个不错的答案。我正在使用scipy和以下代码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import glob
import scipy.optimize
import pylab
def exponential(x,a,k,b):
return a*np.exp(-x/k) + b
def main():
filename = 'tek0071ALL.csv'
df = pd.read_csv(filename,skiprows=14)
t = df['TIME']
ch3 = df['CH3']
idx1 = df.index[df['TIME']==-0.32]
idx2 = df.index[df['TIME']==-0.18]
t= t[idx1.values[0]:idx2.values[0]]
data=ch3[idx1.values[0]:idx2.values[0]]
popt_exponential,pcov_exponential = scipy.optimize.curve_fit(exponential,t,data,p0=[1,.1,0])
# print(popt_exponential,pcov_exponential)
print(popt_exponential[0])
print(popt_exponential[1])
print(popt_exponential[2])
plt.plot(t,'.')
plt.plot(t,exponential(t,popt_exponential[0],popt_exponential[1],popt_exponential[2]))
plt.show()
plt.legend(['Data','Fit'])
main()
这是合适的样子:
,我认为这实际上很合适。我认为我的时间常数是正确的,这就是我要提取的内容。但是,振幅确实给我带来了麻烦-通过检查,我希望振幅约为0.5,但是我得到了方程A*exp(-t/K)+C
的以下值:
A:1.2424893552249658e-07
K:0.0207112474466181
C: 0.010623336832120528
我只是想知道这是否正确,而我的振幅确实应该小得足以说明指数行为。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。