使用 lmfit,您可以定义 4 个参数(a
, b
, c
, and delta
). a
and b
可以自由变化。delta
允许变化,但最大值为 10 来表示不等式。c
将被限制为delta-a-b
(所以,仍然有3个变量:c
会有所不同,但并不独立于其他)。如果需要,您还可以对值设置界限a
, b
, and c
。如果不进行测试,您的代码将大约为:
import numpy as np
from lmfit import Model, Parameters
def f(x, a, b, c):
return a*x**2 + b*x + c
x = np.linspace(0, 100.0, 101)
y = 2*x**2 + 3*x + 4.0
fmodel = Model(f)
params = Parameters()
params.add('a', value=1, vary=True)
params.add('b', value=4, vary=True)
params.add('delta', value=5, vary=True, max=10)
params.add('c', expr = 'delta - a - b')
result = fmodel.fit(y, params, x=x)
print(result.fit_report())
请注意,如果您实际上遇到约束表达式或边界决定参数值的情况,则可能无法估计不确定性。