def groupInverse(M):
"""
Computes the group inverse of stochastic matrix using the algorithm
given by Golub and Meyer in:
G. H. Golub and C. D. Meyer, Jr, SIAM J. Alg. Disc. Meth. 7, 273-
281 (1986)
Parameters
----------
M : ndarray
A square matrix with index 1.
Returns
-------
grpInvM : ndarray
The group inverse of M.
"""
L=np.shape(M)[1]
q,r=qr(M)
piDist=q[:,L-1]
piDist=(1/np.sum(piDist))*piDist
specProjector=np.identity(L)-np.outer(np.ones(L),piDist)
u=r[0:(L-1),0:(L-1)]#remember 0:(L-1) actually means 0 to L-2!
uInv= inv(u)#REPLACE W. lapack, invert triangular matrix ROUTINE
uInv = np.real(uInv)
grpInvM=np.zeros((L,L))
grpInvM[0:(L-1),0:(L-1)]=uInv
grpInvM=np.dot(specProjector,np.dot(grpInvM,np.dot(q.transpose(),specProjector)))
return grpInvM
评论列表
文章目录