Я пытаюсь получить двумерную подгонку 2D полиномиальной функции второго порядка (D (I, V)) с использованием пакета LMFit. Мне нужно определить значения коэффициентов D (I, V), чтобы я мог определить параметры для модели неидеального диода.
D (I, V) = d1 * V + i1 * I + d1i1 * V * I + d2 * V ^ 2 + i2 * I ^ 2
Ссылка на изображение уравнения включена сюда: Уравнение D (I, V)
I и V - экспериментальные данные по току и напряжению.
Параметры d2 и i2 должны быть отрицательными. Я прочитал документацию LMFit об ограничениях неравенства https://lmfit.github.io/lmfit-py/constraints.html#using -inequality-constraints , но у меня возникают проблемы с реализацией неравенства для d2, i2 <0, так как я не знаю, какие значения установить максимум из d2 и i2 быть. </p>
Модель D (I, V):
def D_2d(vi_mesh, d1, i1, d1i1, d2, i2):
# unpack 1D list into 2D x and y coordinates
(v, i) = vi_mesh
# make 2D integral difference function matrix
D = (i1 * i) + (d1 * v) + (d1i1 * v * i) + (i2 * i ** 2) + (d2 * v ** 2)
# flatten the 2D matrix into 1D
return np.ravel(D)
Подгонка рассчитывается с использованием:
# Initial guesses for the DIF function coefficients
guess_vals = [1, -1, 1, -1, -1]
# Fit model to DIF function
lmfit_result = lmfit_model.fit(
np.ravel(DIF),
vi_mesh=vi_mesh,
d1=Parameter("d1", value=guess_vals[0], vary=True),
i1=Parameter("i1", value=guess_vals[1], vary=True),
d1i1=Parameter(
"d1i1", value=guess_vals[2], expr="sqrt(1 + (4*d2*i2))", vary=True
),
d2=Parameter("d2", value=guess_vals[3], vary=True),
i2=Parameter("i2", value=guess_vals[4], vary=True),
)
Как сделать Я ограничиваю d2 и i2 быть отрицательными?