用Scipy / Numpy约束普通最小二乘法

问题描述 投票:0回答:1

我试图解决线性方程组:

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 a向量,它们一起表示该系统系数的边界条件

这是使用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中使用什么来做到这一点?

python numpy scipy linear-algebra mathematical-optimization
1个回答
0
投票

为此你可以使用scipy.minimize(method='SLSQP')。文档是here

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

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

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

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

如果你有一个平滑的单调或上下文功能,根据我的经验,SLSQP应该足够了。

© www.soinside.com 2019 - 2024. All rights reserved.