1. 矩阵(Matrix)
矩阵就像一个数字表格,由行和列组成。例如,一个2x2的矩阵看起来像这样:
A = [ a b ]
[ c d ]
这里,a、b、c、d是数字。矩阵可以更大,比如3x3、4x4等,但必须是方阵(行数和列数相等)才能讨论伴随矩阵和代数余子式。
2. 代数余子式矩阵(Cofactor Matrix)
对于矩阵中的每一个元素,我们都可以计算它的"代数余子式"。计算步骤如下:
- 步骤1:去掉这个元素所在的行和列,得到一个小一点的矩阵(称为子矩阵)。
- 步骤2:计算这个子矩阵的行列式(行列式是一个数值,表示矩阵的某种性质)。
- 步骤3:乘以一个正负号,规则是:(-1)的(行号+列号)次方。行号和列号从1开始计数。
所有代数余子式按原位置排列成的矩阵,就是代数余子式矩阵。
例子:考虑一个2x2矩阵:
A = [ a b ]
[ c d ]
- 对于元素a(第1行第1列):去掉第1行和第1列,剩下一个1x1矩阵 [d],它的行列式就是d。符号是(-1)^(1+1)=1,所以代数余子式是 d。
- 对于元素b(第1行第2列):去掉第1行和第2列,剩下 [c],行列式是c。符号是(-1)^(1+2)=-1,所以代数余子式是 -c。
- 对于元素c(第2行第1列):去掉第2行和第1列,剩下 [b],行列式是b。符号是(-1)^(2+1)=-1,所以代数余子式是 -b。
- 对于元素d(第2行第2列):去掉第2行和第2列,剩下 [a],行列式是a。符号是(-1)^(2+2)=1,所以代数余子式是 a。
所以,代数余子式矩阵是:
[ d -c ]
[ -b a ]
3. 伴随矩阵(Adjoint Matrix)
伴随矩阵就是代数余子式矩阵的转置。转置意思是把行和列互换:第一行变成第一列,第二行变成第二列,等等。
从上面的例子中,代数余子式矩阵是:
[ d -c ]
[ -b a ]
转置后,伴随矩阵就是:
[ d -b ]
[ -c a ]
它们之间的关系
- 代数余子式矩阵是计算伴随矩阵的基础。
- 伴随矩阵是代数余子式矩阵的转置。
- 伴随矩阵主要用于求矩阵的逆矩阵(如果矩阵可逆)。公式是:逆矩阵 = 伴随矩阵 / 原矩阵的行列式。
- 例如,如果矩阵A的行列式是det(A),那么A的逆矩阵是 adj(A) / det(A)。
总结
- 矩阵:数字表格。
- 代数余子式矩阵:每个元素替换成其代数余子式后的矩阵。
- 伴随矩阵:代数余子式矩阵的转置。
MATLAB内置函数
1. 直接计算伴随矩阵
matlab
% 定义矩阵
A = [2, 3; 1, 4];
% 方法1:使用 adjoint 函数(需要 Symbolic Math Toolbox)
% 如果安装了符号数学工具箱
syms a b c d
A_sym = [a, b; c, d];
adj_A_sym = adjoint(A_sym);
disp('符号矩阵的伴随矩阵:');
disp(adj_A_sym);
% 方法2:对于数值矩阵,可以用 det(A)*inv(A) 得到伴随矩阵
adj_A_numeric = det(A) * inv(A);
disp('数值方法计算的伴随矩阵:');
disp(adj_A_numeric);
2. 实际使用中的简便方法
matlab
% 定义矩阵
A = [2, 3; 1, 4];
% 计算逆矩阵的最简单方法
A_inv = inv(A);
disp('逆矩阵:');
disp(A_inv);
% 如果需要伴随矩阵,可以通过逆矩阵和行列式计算
det_A = det(A);
adj_A = det_A * A_inv;
disp('通过逆矩阵计算的伴随矩阵:');
disp(adj_A);
% 验证:A * adj(A) = det(A) * I
verify = A * adj_A;
disp('验证 A * adj(A) = det(A) * I:');
disp(verify);
3. 对于代数余子式矩阵
MATLAB没有直接计算代数余子式矩阵的内置函数,但可以轻松编写:
matlab
% 简洁的代数余子式矩阵计算函数
function C = cofactorMatrix(A)
[n, n] = size(A);
C = zeros(n, n);
for i = 1:n
for j = 1:n
% 创建子矩阵
subA = A;
subA(i,:) = [];
subA(:,j) = [];
% 计算代数余子式
C(i,j) = (-1)^(i+j) * det(subA);
end
end
end
% 使用函数
A = [1, 2, 3; 4, 5, 6; 7, 8, 9];
cofactor_A = cofactorMatrix(A);
disp('代数余子式矩阵:');
disp(cofactor_A);
4. 最实用的方法总结
matlab
% 对于日常使用,通常只需要:
A = [2, 3; 1, 4];
% 1. 求逆矩阵
A_inv = inv(A);
% 2. 求行列式
det_A = det(A);
% 3. 如果需要伴随矩阵
adj_A = det_A * A_inv;
% 4. 验证矩阵是否可逆
if det_A ~= 0
disp('矩阵可逆');
else
disp('矩阵不可逆');
end
5. 符号计算工具箱的强大功能
matlab
% 如果安装了符号数学工具箱,可以这样用:
syms a b c d
A = [a, b; c, d];
% 直接计算伴随矩阵
adj_A = adjoint(A);
% 直接计算逆矩阵
A_inv = inv(A);
% 计算行列式
det_A = det(A);
disp('符号矩阵的伴随矩阵:');
disp(adj_A);
关键点
- 对于数值矩阵 :通常直接用
inv()和det()就够了 - 如果需要伴随矩阵 :用
det(A) * inv(A) - 对于符号计算 :使用
adjoint()函数 - 代数余子式矩阵:MATLAB没有内置函数,需要自己编写
所以你的直觉是对的 - 在实际应用中,我们很少需要显式地计算代数余子式矩阵,直接用内置的矩阵运算函数更加高效和方便!