📅  最后修改于: 2023-12-03 15:02:53.411000             🧑  作者: Mango
inv()
和 pinv()
函数的区别在 MATLAB 中,inv()
和 pinv()
都是用来求矩阵的逆的函数。但是它们之间还是有些区别的。在本文中,我们将详细介绍这两个函数的区别。
inv()
函数inv()
函数是用来求方阵的逆的。具体来说,对于一个 $n$ 阶方阵 $A$,如果它的行列式 $\det(A) \neq 0$,那么 $A$ 的逆矩阵 $A^{-1}$ 就存在,且可以使用 inv()
函数来求得:
A_inv = inv(A);
需要注意的是,当 $A$ 的行列式为 $0$ 时,它的逆矩阵就不存在,inv()
函数将会返回一个空矩阵。此外,对于非方阵 $A$,inv()
函数也无法计算它的逆矩阵。
pinv()
函数pinv()
函数是用来求广义逆矩阵的。所谓广义逆矩阵,是指对于任意矩阵 $A$,都存在一个矩阵 $A^{\dagger}$,使得下面两个等式成立:
$$A A^{\dagger} A = A$$
$$A^{\dagger} A A^{\dagger} = A^{\dagger}$$
如果 $A$ 是满秩(即 $\mathrm{rank}(A) = \min(m,n)$,其中 $m$ 和 $n$ 分别是 $A$ 的行数和列数),则 $A^{\dagger}$ 就是 $A$ 的逆矩阵 $A^{-1}$。如果 $A$ 不满秩,那么 $A^{\dagger}$ 仍然是存在的,但它不再等于 $A^{-1}$。
为什么要引入广义逆矩阵呢?因为在实际计算中,我们遇到的矩阵往往不是满秩的,而且可能还存在奇异矩阵(即行列式为 $0$ 的矩阵)。此时,我们无法直接使用 inv()
函数来求逆矩阵,而要使用 pinv()
函数来求广义逆矩阵。例如:
A = [1 2 3; 4 5 6; 7 8 9; 10 11 12];
B = [1 2; 3 4; 5 6];
A_pinv = pinv(A);
B_pinv = pinv(B);
需要注意的是,当矩阵 $A$ 是满秩矩阵时,pinv(A)
将等于 inv(A)
。
inv()
函数是用来求方阵逆矩阵的函数,只有方阵才能使用。pinv()
函数是用来求广义逆矩阵的函数,适用于任意矩阵。当矩阵满秩时,两个函数的结果相同。当矩阵不满秩时,inv()
函数将无法计算矩阵的逆矩阵,而 pinv()
函数仍然可以计算出其广义逆矩阵。