0

我有以下代码,我打算用它从许多不同的文件中读取和绘制许多曲线。“阅读和绘图”已经工作得很好。

问题是现在我想在同一个图中对所有这些曲线进行拟合。该代码已经设法拟合曲线,但输出全部在一个数组中,我无法绘制它,因为我无法将它分开。

#!/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_fitlmfit 中最适合该曲线的“文件”时,我得到了这个结果的 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

这意味着代码正在正确计算拟合,我只需要以某种方式分离这个输出,以便用它们的曲线绘制它们中的每一个。之间的每组值[]都是我想以我可以绘制的方式分开的。

4

1 回答 1

0

我看不出您发布的代码如何产生您的输出。我没有看到打印出 26 个值的数组的 print() 函数,但可以想象这可能是您的列表的长度xy并且abscurrent- 它不是您的输出print(result.fit_report()),我没有看到该结果。

我没有看到任何建议您有 12 条独立曲线。

另外,result.best_fit不是文件,而是数组。

于 2017-02-09T03:01:16.963 回答