optimize.curve_fit: 如何将一个参数绑定到另一个?

optimize.curve_fit: how to bound one parameter respective to another?

做的时候(临时例子)

from scipy import optimize

def fit_func(x, a, b):
    return a*x + b

optimize.curve_fit(fit_func, x_data, y_data)

如何设置像 a>b 这样的界限?我知道选项 bounds,但它似乎只接受明确的数字。

也许 fit_func 的定义中有一些 if

您可以尝试解决方法,而不是将函数定义为:

def fit_func1(x, a, b):
    return a*x + b

在约束 a>b 的情况下,您可以:

def fit_func2(x, this_much_a_is_bigger_than_b, b):
    return (a+this_much_a_is_bigger_than_b)*x + b

有约束this_much_a_is_bigger_than_b > 00是一个明确的数字,fit_func2函数从数学角度等价于fit_func1

那么你可以拥有:

a = b + this_much_a_is_bigger_than_b
b = b

Curce_fit 仅支持框约束(通过 least_squares)。有解决方法,但我宁愿将变量更改为例如 ab-a