欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

虚反矩阵指令pinv之应用

程序员文章站 2022-03-05 16:52:36
...

pinv指令
在多数解的例子中,有时并不是仅要将其中一变数设定为零之解。为使整个系统得到最佳化,亦可利用pinv指令求得最小模组之合理解。pinv(A)又称为虚反矩阵(pseudoinverse),其功能与反矩阵之计算相同,但它会基于svd(A)函数(或称奇异值分解函数)之计算方式,求得一个不是属于全阶之矩阵A之反矩阵。这是长方形矩阵求解时,在多重解中求其反矩阵之折衷方式。故若矩阵A为方矩阵或非零矩阵,则其结果应与inv(A)相同。只是在这样的状况,宁可使用inv(A)较为省事。处理这些长方矩阵或特异矩阵时,使用pinv(A)会有意想不到的效果。其解法是根据反矩阵法:

A=[3 2 1; 10 -25 5];

C=[5000 2000]’;

T=inv(A)*C

Error using inv

inv Matrix must be square.

T=pinv(A)*C

T =

1.0e+03 *

1.2039

0.4852

0.4180

上面之例因为A不是方形矩阵,故求其反矩阵时会有错误的信息,但若用虚反矩阵指令pinv,反而相安无事,这是将T1、T2以其馀一变数T3表示之情况下,求得其最小平方之组合。其结果是否合用则端视问题之限制与应用而定。 PINV(A,TOL) 之指令後面另有参数TOL,可以输入容许值。其预设值为MAX(SIZE(A)) * NORM(A) * EPS(class(A)),读者可参考手册之说明,以了解其使用方法。

inv与pinv的区别

对于非奇异且不接近奇异的方阵两个命令输出结果相同,但是对于接近奇异的矩阵使用两个命令结果却不同,

1.对于方阵A,如果为非奇异方阵,则存在逆矩阵inv(A)
2.对于奇异矩阵或者非方阵,并不存在逆矩阵,但可以使用pinv(A)求其伪逆

Matlab中的‘\ ’和‘/’和pinv的关系以及运算

当A是N阶方阵B为N行的列向量时,X=A\B就是线性方程组A*X=B的解,算法是用高斯消去法。A\EYE(SIZE(A))产生的是方阵A的逆矩阵。

如果A是MN的矩阵且M≠N,B是跟A行数(M行)相同的列向量时,X=A\B是非满秩的线性方程组AX=B的解系,A的秩K由QR分解得出。如果K<N通常结果与PINV(A)*B不等(PINV(A)是求A的广义逆矩阵)。 A\EYE(SIZE(A))得到的是A的广义逆矩阵。

总而言之,A\B就是求A*X=B的解,你可以看作是A的逆矩阵,只不过是广义逆矩阵,这样A不是方阵也可以计算的。

至于A/B,在解线性方程组上比\少用一些,因为通常都把B写成列向量,所以用反除\就可以了。用/的话,B通常是行向量。

可以把B/A看作是X*A=B的解,这里B的列数等于A的列数。

A\B=pinv(A)*B

A/B=A*pinv(B)

可见,’'用的是高斯消元法。

相关标签: 矩阵