使用scipy / numpy的普通最小二乘的约束



我正在尝试求解线性方程组:

min || Ax - B ||^2
    for t in [0,1]
such that the coefficients x in this equation satisfy the linear equation:
C x = D

该系统试图拟合一组多项式以在t。

的范围内近似a函数f(t)
  • a是一个矩阵,代表t值范围内多项式集的图
  • x是对应于
  • 中每个多项式的重量的系数的向量(我想要的)
  • b是代表f(t)值的向量,
  • c是一个矩阵和d vector,它共同表示该系统系数上的边界条件

这是使用普通最小二乘的约束求解线性方程的情况。

虽然有已知的封闭形式解决方案,例如Karush-Kuhn-Tucker我正在寻找可以用来解决此问题的scipy/numpy中的路由。

研究显示了scipy.optimize模块,其中包括以下功能:

scipy.optimize.leastrongquares。

scipy.optimize.nnls。

scipy.optimize.lsq_linear。

从这个问题和这个问题中提出了上述。

但是,这些条件不适合其他线性方程的限制。我可以在scipynumpy中使用什么?

为此,您可以使用scipy.minimize(method='SLSQP')。文档在这里。

您可以将平等约束定义为具有签名的可呼叫功能:

def cons1(x):
    return sum(D - C*x)

slsqp Essential使用约束来驱动优化问题。请注意,这是一个基于梯度的体面,因此您很可能会找到一个局部最小值的高维问题。

另一个选项是scipy.minimize(method=’trust-constr’),文档在这里。这些方法是在Python中本地实施的,因此可以通过。

可以访问源代码和修改。

如果您具有平稳的单调或上下文功能,就我的经验而言,SLSQP就足够了。

最新更新