使用Scipy / Numpy约束最小二乘

时间:2019-02-26 10:51:18

标签: python numpy scipy linear-algebra mathematical-optimization

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

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范围内近似函数F(t)。

  • A是一个矩阵,表示t值范围内多项式集合的映射
  • x是系数的矢量(我想要的),该系数与应用于A中每个多项式的权重相对应。
  • B是代表F(t)值的向量
  • C是一个矩阵,D是一个矢量,它们共同表示该系统系数的边界条件

这是使用constraint of ordinary least squares求解线性方程的情况。

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

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

scipy.optimize.least_squares

scipy.optimize.nnls

scipy.optimize.lsq_linear

以上建议来自this questionthis question

但是这些条件不具备约束其他线性方程的条件。我可以在scipynumpy中使用什么来做到这一点?

1 个答案:

答案 0 :(得分:0)

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

您可以将等式约束定义为带有签名的可调用函数:

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

SLSQP必不可少的使用约束,然后驱动您的优化问题。请注意,这是基于渐变的体面,因此您很可能会发现高维问题的局部最小值。

另一个选项是scipy.minimize(method=’trust-constr’),文档是here。这些方法是在python中本地实现的,因此可以通过以下方式访问源代码和修改。

如果您具有平滑的单调或上下文函数,以我的经验SLSQP就足够了。