如果X不是满秩矩阵的时候,那么不能使用inv()
函数来求X的逆,因为X此时不存在逆,但是我们可以求X的伪逆。
(1)有以下两种方法求X的伪逆:
假设 X=[1 2 1;1 2 1;2 3 4];
1, pinvX=pinv(X); %对于满秩方阵,pinv(X)=inv(X);
2,
[U,D,P]=svd(X);
r=rank(X);
Dnew=zeros(size(D));
Dnew(1:r,1:r)=diag(diag(D(1:r,1:r)).^(-1));
eigX=P*Dnew*U';
二者是等价的。
(2)求X的负二分之一次方可以用:
[U,D,P]=svd(X);
r=rank(X);
Dnew=zeros(size(D));
Dnew(1:r,1:r)=diag(diag(D(1:r,1:r)).^(-1/2));
eigX=P*Dnew*U';
如果X满秩的话,还可以用:
pinvX=pinv(X)
pinvX=sqrtm(pinvX);