matlab中pinv的用法,帮忙看看这个代码的含义,谢谢

2025-04-07 07:45:31
推荐回答(3个)
回答1:

pinv(a)是求伪逆矩阵,逆矩阵函数inv只能对方阵求逆,pinv(a)可以对非方阵求逆。

pinv(a)=inv(a'*a)*a'

例如:

b=rand(2,3)

b =

0.1966   0.6160   0.3517

0.2511   0.4733   0.8308

>> c=pinv(b)

c =

0.2577   0.0900

2.3495   -1.0377

-1.4163   1.7676

扩展资料:

MATLAB中的pinv和inv的区别:

1、对于方阵A,如果为非奇异方阵,则存在逆矩阵inv(A)

2、对于奇异矩阵或者非方阵,并不存在逆矩阵,但可以使用pinv(A)求其伪逆

若A为非奇异矩阵,请不要使用pinv求逆,虽然计算结果相同,即

inv( A ) = pinv( A )

但pinv的计算复杂度较高

参考资料来源:百度百科-伪逆矩阵

回答2:

虚反矩阵指令pinv之应用

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

回答3:

pinv(B)求的是矩阵B的Moore-Penrose逆,是B的一种广义逆,也就是你说的伪逆,该广义逆满足四个条件:
A*B*A = A
B*A*B = B
A*B 是海森矩阵
B*A是海森矩阵。
这个在矩阵论中有讲,你可以去看看