这个问题的答案仅适用于耦合函数的所需解决方案不限于特定范围的情况。
但是,例如,如果我们想要一个这样的解决方案0 < x < 10呢0 < y < 10?
其中有一些函数可以scipy.optimize在给定区间(例如 )内找到函数的根brentq,但这些函数仅适用于一个变量的函数。
为什么没有scipy提供适用于特定范围内的多变量函数的根求解器?如何实现这样的求解器?
这个问题的答案仅适用于耦合函数的所需解决方案不限于特定范围的情况。
但是,例如,如果我们想要一个这样的解决方案0 < x < 10呢0 < y < 10?
其中有一些函数可以scipy.optimize在给定区间(例如 )内找到函数的根brentq,但这些函数仅适用于一个变量的函数。
为什么没有scipy提供适用于特定范围内的多变量函数的根求解器?如何实现这样的求解器?
作为一种解决方法,您可以最小化包含目标和约束的另一个函数,然后检查 sol.fun 是否(在数值上)等于零。
from scipy.optimize import minimize
import numpy as np
f = lambda x: np.sin(x).sum() #the function to find roots of
L = np.array([-1,-1]) #lower bound for each coordinate
U = np.array([1, 1]) #upper bound for each coordinate
g = lambda x: f(x) **2 + max(0, (L - x).max(), (x - U).max())
sol = minimize(g, [0.5,0.5])
此外,scipy.optimize 似乎有一些支持矩形边界的优化器,即differential_evolution(自0.15.0 版起)。