Генерация данных и подбор кривой из уравнения с Y на обеих сторонах - PullRequest
0 голосов
/ 24 мая 2019

Я хочу соответствовать кривым, сгенерированным этим уравнением (1):

(1) ID=K*(W/L)*[(VG-VT*(ID*RD/2))**(alpha-1) * (VD-ID*RD)-(1-1/alpha)*(VD-ID*RD)**alpha]

Однако переменная 'ID' находится с обеих сторон.Я пытаюсь найти способ изменить код, приведенный в этом примере, из scipy: https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

#the function for ID, with ID in the arguments. 
def func(K, W, L, VG, VT, ID, RD, alpha, VD ):
    return K*(W/L)*[(VG-VT*(ID*RD/2))**(alpha-1) * (VD-ID*RD)-(1-1/alpha)*(VD-ID*RD)**alpha]

#x_data
VG_data = np.linspace(-6, 16, 300)

#y_data: ID is also an argument of the function here
ID = func(VG=VG_data, K=5.2*1e-7, W=320*1e-6, L=20*1e-6, VT=0.68, VD=5e-3, alpha=2.2, RD=5.79)



popt, pcov = curve_fit(func, VG_data, ID)
popt

plt.plot(VG_data, func(VG_data, *popt), 'r-')


Когда я запускаю его, я, очевидно, получаю ошибку при попытке сгенерировать ID:

---> 27 ID = func(VG=VG_data, K=5.2*1e-7, W=320*1e-6, L=20*1e-6, VT=0.68, VD=5e-3, alpha=2.2, RD=5.79)
     28 
     29 

TypeError: func() missing 1 required positional argument: 'ID'

Как генерировать и подгонять данные, когда у меня есть переменная 'y' с обеих сторон?

РЕДАКТИРОВАТЬ

Я добавляю ссылку на пример данных (VG, ID) и код для их построения:

импорт панд как pdимпорт matplotlib.pyplot как plt

url='https://raw.githubusercontent.com/leoUninova/Transistor-altair-plots/master/df1.csv'
df=pd.read_csv(url)
#a single transistor data
df=df.loc[df.Name=='300-250-10.0-10.0']
VG=df.VG
ID=df.absID
plt.plot(VG,ID)
plt.show()

enter image description here

...