2017-02-08 10 views
0

У меня есть следующий код, с которым я собираюсь читать и рисовать много кривых из разных файлов. «Чтение и заговор» уже работает очень хорошо.lmfit matplot - установка многих кривых из разных файлов одновременно/график

Проблема в том, что теперь я хочу сделать фитинг для всех этих кривых на одном и том же участке. Этот код уже умеет соответствовать кривым, но вывод все в одном массиве, и я не могу его построить, так как я не мог его разделить.

#!/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 

Это означает, что код правильно вычисляет соответствие, мне просто нужно как-то отделить этот вывод, чтобы построить каждый из них с их кривой. Каждый набор значений между [] - это то, что я хочу разделить так, как я могу его построить.

ответ

0

Я не вижу, как код, который вы опубликовали, может привести к выходу вашего продукта. Я не вижу функцию print(), которая выводит массив из 26 значений, но представляла бы, что это может быть длина ваших списков x, y и abscurrent - это не вывод вашего print(result.fit_report()), и я не вижу это результат.

Я ничего не вижу, чтобы предложить вам 12 независимых кривых.

Также result.best_fit не является файлом, это массив.

+0

Печать не в этом коде, я имел в виду, что я пробовал :). Я решил это, добавив часть кода, связанную с исправляющим «результатом» для каждой кривой после ее открытия: 'result01 = gmod.fit (abscurrent01, x = x01, j = 10e-10, n = 1)'. Поступая таким образом, я смог вызвать «result01.best_fit» и т. Д. Код, который я разместил, не был полным, так как он был слишком длинным ... но он генерирует то, что я имел в виду –

+0

Извините, но я все еще не понимая вас. Но я рад слышать, что вы решили, какую бы проблему вы ни испытывали. Если нет, напишите полный, минимальный пример фактического кода. –

 Смежные вопросы

  • Нет связанных вопросов^_^