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 > 0
,0
是一个明确的数字,fit_func2
函数从数学角度等价于fit_func1
。
那么你可以拥有:
a = b + this_much_a_is_bigger_than_b
b = b
Curce_fit 仅支持框约束(通过 least_squares)。有解决方法,但我宁愿将变量更改为例如 a
和 b-a
做的时候(临时例子)
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 > 0
,0
是一个明确的数字,fit_func2
函数从数学角度等价于fit_func1
。
那么你可以拥有:
a = b + this_much_a_is_bigger_than_b
b = b
Curce_fit 仅支持框约束(通过 least_squares)。有解决方法,但我宁愿将变量更改为例如 a
和 b-a