gpt4 book ai didi

python-3.x - 使用python的等式约束最小二乘拟合

转载 作者:行者123 更新时间:2023-12-04 12:52:49 25 4
gpt4 key购买 nike

谁能帮我写一个 python 脚本?问题如下所述。

我需要对一些线性方程执行等式约束线性最小二乘拟合。对于特定的线性方程,矩阵方程看起来像 [Y]{nX1}=[X]{nXm}[P]_{mX1},其中 Y 和 P 是向量,X 是矩阵n, m 是矩阵的维数。此外,P 上存在一个等式约束,即 Sum(P(i))=0.0。有谁知道我该如何继续解决这个问题? python的哪个函数适合这个?我很少看到关于 scipy.optimize.fmin_slsqp() 函数的讨论,但是这个函数的使用不是很简单。

但是,我可以使用 numpy 轻松地对上述问题进行无约束最小二乘拟合。这是小脚本。

import numpy as np
from numpy import matrix
from numpy import arange,array,ones,linalg
x = np.random.randn(500,3)
A=matrix([[3.0, 4.0, -7.0],[4.0, -5.0, 1.0],[3.0, 2.0, -5.0]])
y=A*x.T
w=linalg.lstsq(x,y.T)[0]
print w.T

在这里,我生成了一个随机向量 x,然后通过 A 和 x.T 的矩阵乘法生成了向量 y。然后我使用 x 和 y 向量并评估矩阵 A 的元素。上面的脚本完美地再现了矩阵 A。这让我相信 lsf 有效。然而,它只是最小二乘拟合。没有任何限制。

另一件事,是否可以将受约束的 lsf 问题转换为不受约束的 lsf 问题。如果是这样,那么我可以使用上面的脚本。拉格朗日乘数法是可能的选择之一。但是,我很难为我的问题评估乘数。这是因为,方程包含大量变量。如果有

顺便说一下,MATLAB 中约束 lsf 的类似函数是 lsqlin。

上周我一直在为此苦苦挣扎。请在这方面帮助我。如果您有任何其他建议,那也很好。

祝福

最佳答案

适用于稠密矩阵的等式约束线性最小二乘拟合目前 (Scipy 1.5) 在 Python 中可用,可直接调用相关的 LAPACK 例程 scipy.linalg.lapack.dgglse . DGGLSE 的 LAPACK 文档是 here .

举个例子,解决问题

min ||A @ x - b||
subject to C @ x = d

可以使用Python代码获取

from scipy.linalg import lapack

# Define the matrices as usual, then
x = lapack.dgglse(A, C, b, d)[3]

关于python-3.x - 使用python的等式约束最小二乘拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18134079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com