python 中非线性向量函数的求根:如何为变量设置界限?
Root finding for nonlinear vector functions in python: how can I place bounds on my variables?
对于标量函数的求根,scipy.optimize.root_scalar
提供了一个非常有用的 bracket
参数,我可以使用它来设置包含我的根的区间,以确保我找到的根是我找到的那个想。我想对 (x1, x2) 的向量函数做同样的事情,其中对我来说唯一有意义的根位于两个变量的 (0, 1) 之间。但是,scipy scipy.optimize.root
中的向量求根函数无法让我指定边界,而且我似乎也无法将其指定为任何求解器方法的选项.
是否有任何解决此问题或其他 packages/functions 的方法可以满足我的要求?我对寻根非常陌生,但令我惊讶的是这个功能很难找到,因为直觉上寻根似乎如果指定了界限会更容易。有什么方法可以破解我的函数以将这些算法之一指向 (0, 1) 区域?
函数 scipy.optimize.root_scalar
有 bracket
参数,因为当函数只有一个参数时,可以使用二分算法求根。
在更高的维度中没有这样的二分算法。
不过,在多个维度中,可以在scipy.optimize.brute
中指定ranges
来限制搜索space的解决方案。
要找到 f(x_1, ..., x_n)
的根,您可以尝试在 f(x_1, ..., x_n)^2
上使用 scipy.optimize.brute
,因为根是平方函数的全局最小值。
对于标量函数的求根,scipy.optimize.root_scalar
提供了一个非常有用的 bracket
参数,我可以使用它来设置包含我的根的区间,以确保我找到的根是我找到的那个想。我想对 (x1, x2) 的向量函数做同样的事情,其中对我来说唯一有意义的根位于两个变量的 (0, 1) 之间。但是,scipy scipy.optimize.root
中的向量求根函数无法让我指定边界,而且我似乎也无法将其指定为任何求解器方法的选项.
是否有任何解决此问题或其他 packages/functions 的方法可以满足我的要求?我对寻根非常陌生,但令我惊讶的是这个功能很难找到,因为直觉上寻根似乎如果指定了界限会更容易。有什么方法可以破解我的函数以将这些算法之一指向 (0, 1) 区域?
函数 scipy.optimize.root_scalar
有 bracket
参数,因为当函数只有一个参数时,可以使用二分算法求根。
在更高的维度中没有这样的二分算法。
不过,在多个维度中,可以在scipy.optimize.brute
中指定ranges
来限制搜索space的解决方案。
要找到 f(x_1, ..., x_n)
的根,您可以尝试在 f(x_1, ..., x_n)^2
上使用 scipy.optimize.brute
,因为根是平方函数的全局最小值。