График разбросанных данных
Мне нужно подогнать (x, y) -данные к уравнению с двумя переменными (x и y) и извлечь 5 неизвестных параметров.
Я делаю сценарий для обработки IV-данных (тока-напряжения) из простого .txt-файла и подгонки его к уравнению, называемому уравнением неидеального диода; это неявная нелинейная функция.
До сих пор я открыл файл с помощью python, отсортировал данные по массивам, сделал точечный график необработанных данных, и я знаю, как должна выглядеть функция, которая должна быть подогнана. Я попытался определить уравнение и попробовал функции SciPy fsolve и curve_fit, но все же без удачи (возможно, я просто плохо их использую).
Мне нужно просто подогнать данные к следующему уравнению, извлечь параметры и построить фактическую кривую:
y = a - b * (np.exp ((x - y * d) / c) - 1) - (x + y * d) / e
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize
OpenFile = pd.read_csv("test.txt", sep="\t", header=0)
FileArray = np.array(OpenFile)
x = FileArray[:, 0]
y = FileArray[:, 1] * 1000.0 / 0.08
plt.scatter(x, y)
def diode(data, a, b, c, d, e):
v, j = data
return a - b * (np.exp((v - j * d) / c) - 1) - (v + j * d) / e - j
### FAILED SCIPY OPTIMIZE ATTEMPT ###
parameters, parameterscovariance = optimize.curve_fit(diode, (x,y), y,
bounds = ([0, 0, 0, 0, 0],
[np.inf, np.inf, np.inf, np.inf, np.inf]),
max_nfev=10000)
plt.plot(x, diode((x,y), parameters[0], parameters[1], parameters[2], parameters[3], parameters[4]))
plt.show()
Код строит точки данных, но необходимо оптимизировать диодное уравнение, получить параметры и построить оптимизированное уравнение.
РЕДАКТИРОВАТЬ: теперь вставлена попытка заставить Сципи оптимизировать неявную функцию