📜  MATLAB 中 inv() 和 pinv() 函数的区别(1)

📅  最后修改于: 2023-12-03 15:02:53.411000             🧑  作者: Mango

MATLAB 中 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() 函数仍然可以计算出其广义逆矩阵。