谁能帮我写一个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 和 xT 的矩阵乘法生成向量 y 然后我使用 x 和 y 向量并评估矩阵 A 的元素。上面的脚本完美地再现了矩阵 A。这给了我信心lsf 有效。但是,它只是最小二乘拟合。没有限制。
另一件事,是否可以将受约束的 lsf 问题转换为不受约束的 lsf 问题。如果是这样,那么我可以使用上面的脚本。拉格朗日乘子法是一种可能的选择。但是,我很难评估我的问题的乘数。这是因为,方程包含大量变量。如果有
顺便说一下,MATLAB 中约束 lsf 的类似函数是 lsqlin。
上周我正在为此苦苦挣扎。请在这方面帮助我。如果您有任何其他建议,那也很棒。
最好的祝愿