我如何将LMFit参数限制为负值?

问题描述 投票:0回答:1

我正在尝试使用LMFit软件包获得二阶2D多项式函数(D(I,V))的二维拟合。我需要确定D(I,V)的系数值,以便可以确定非理想二极管模型的参数。

D(I,V)= d1 * V + i1 * I + d1i1 * V * I + d2 * V ^ 2 + i2 * I ^ 2

此处包含到方程式图片的链接:Equation D(I,V)

I和V是实验电流和电压数据。

参数d2和i2必须为负。我已经阅读了有关不等式约束https://lmfit.github.io/lmfit-py/constraints.html#using-inequality-constraints的LMFit文档,但是由于我不知道将d2和i2的最大值设置为什么值,因此无法实现d2,i2 <0的不等式。

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约束为负?

我正在尝试使用LMFit软件包获得二阶2D多项式函数(D(I,V))的二维拟合。我需要确定D(I,V)的系数值,以便可以...

python curve-fitting surface lmfit
1个回答
0
投票

嗯,你可以做

© www.soinside.com 2019 - 2024. All rights reserved.