我正在尝试计算 K = P*CT*S^-1 形式的表达式(卡尔曼滤波器的实现)
所有涉及的矩阵都是稀疏的,我当然想避免计算实际的逆矩阵。
我尝试使用
import scipy.sparse.linalg as spln
self.K = self.P.dot(spln.spsolve(S.T, C).T)
问题是 spsolve 期望它的第二个参数是向量而不是矩阵。
编辑:澄清,问题可以在Matlab中通过K = P *(C / S)来解决,所以我正在寻找一种类似于spsolve但可以接受矩阵作为其第二个参数的方法。这当然可以通过将 C 拆分为多个列向量 c1..cn 并为每个列向量解决问题然后将它们重新组合成一个矩阵来完成,但我怀疑这样做既麻烦又低效。
edit2&3:矩阵的尺寸通常在 P~10⁶x10^6、S~100x100、C=100x10⁶ 左右。P对角线和S对称,C每行只有一个元素。它将用于使用稀疏矩阵实现卡尔曼滤波器,请参阅
http://en.wikipedia.org/wiki/Kalman_filter#The_Kalman_filter