求一个非奇异矩阵A的伴随矩阵adj(A)我们可以借助逆矩阵inv(A),利用公式:adj(A) = inv(A) * det(A)求得,其中,det(A)表示A的行列式的值。但是如果矩阵A奇异的话,我们应该怎么来求解adj(A)呢?
一种方案是根据伴随矩阵的定义求解,但是求A的n*n个代数余子式的计算量是相当大的,现在我们讨论第二种方案。
我们先给出该方案的matlab代码:
- function B = adj(A)
- %ADJ Matrix adjoint.
- % ADJ(A) is the adjoint matrix of square matrix A.
- % It is computed using the Cayley-Hamilton Theorem.
- % The inverse of A is: INV(A) = ADJ(A)/det(A).
- %
- % Matrices that are not invertable still have an adjoint.
- %written by Paul Godfrey, April, 1998
- %pjg@mlb.semi.harris.com
- ce = poly(eig(A));
- cesize = max(size(ce));
- p = [0 ce(1:(cesize-1))];
- s = (-1)^(max(size(A))+1);
- B = s*polyvalm(p,A);
下面则是对该代码的证明:
证明:根据Cayley-Hamilton定理,矩阵A满足自己的特征多项式,即如果特征多项式为
P(s) = (s - λ1)(s - λ2)...(s - λn)
则P(A) = 0。假设多项式Q(s)是P(s)去掉常数项,即
Q(s) = P(s) - ((-1)^n) * λ1 * λ2 *...* λn
则有
Q(A) = -((-1)^n) * λ1 * λ2 *...* λn = ((-1)^(n+1)) * λ1 * λ2 *...* λn。
注意到
λ1 * λ2 *...* λn = det(A)
继而有
Q(A) = ((-1)^(n + 1)) * det(A) 即 det(A) = ((-1)^(n + 1)) * Q(A)
再设多项式R(s) = Q(s)/s,则有
A * R(A) = Q(A)
所以
A * ((-1)^(n + 1)) * R(A) = det(A)
根据伴随矩阵的定义A * adj(A) = det(A),所以
adj(A) = ((-1)^(n + 1)) * R(A)