我有以下代码,我打算用它从许多不同的文件中读取和绘制许多曲线。“阅读和绘图”已经工作得很好。
问题是现在我想在同一个图中对所有这些曲线进行拟合。该代码已经设法拟合曲线,但输出全部在一个数组中,我无法绘制它,因为我无法将它分开。
#!/usr/bin/python
import matplotlib.pyplot as plt
from numpy import exp
from lmfit import Model
def read_files(arquivo):
x = []
y = []
abscurrent = []
time = []
data = open(arquivo, 'r')
headers = data.readlines()[60:]
for line in headers:
line = line.strip()
X, Y, ABS, T = line.split('\t')
x.append(X)
y.append(Y)
abscurrent.append(ABS)
time.append(T)
data.close()
def J(x, j, n):
return j*((exp((1.6e-19*x)/(n*1.38e-23*333)))-1)
gmod = Model(J)
result = gmod.fit(abscurrent, x=x, j=10e-10, n=1)
return x, y, abscurrent, time
print(result.fit_report())
当我要求打印result.best_fit
lmfit 中最适合该曲线的“文件”时,我得到了这个结果的 12 倍(我有 12 条曲线),具有不同的值:
- Adding parameter "j"
- Adding parameter "n"
[ 4.30626925e-17 3.25367918e-14 9.60736218e-14 2.20310475e-13
4.63245638e-13 9.38169958e-13 1.86480698e-12 3.67881758e-12
7.22634738e-12 1.41635088e-11 2.77290634e-11 5.42490983e-11
1.06108942e-10 2.07520542e-10 4.05768903e-10 7.93323537e-10
1.55126521e-09 3.03311029e-09 5.93085363e-09 1.16032067e-08
2.26884736e-08 4.43641560e-08 8.67362753e-08 1.69617697e-07
3.31685858e-07 6.48478168e-07]
- Adding parameter "j"
- Adding parameter "n"
[ 1.43571772e-16 1.00037588e-13 2.92349492e-13 6.62623404e-13
这意味着代码正在正确计算拟合,我只需要以某种方式分离这个输出,以便用它们的曲线绘制它们中的每一个。之间的每组值[]
都是我想以我可以绘制的方式分开的。