Я хочу соответствовать кривым, сгенерированным этим уравнением (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](https://i.stack.imgur.com/TcQIp.png)