MATLAB 对角分块矩阵
时间: 2025-06-17 09:50:28 浏览: 23
### MATLAB 中创建或操作对角分块矩阵的方法
在 MATLAB 中,创建和操作对角分块矩阵可以通过内置函数 `blkdiag` 实现[^1]。此函数允许用户将多个矩阵作为输入参数,并生成一个以这些矩阵为对角块的分块对角矩阵。如果输入矩阵中包含稀疏矩阵,则输出的分块对角矩阵也会是稀疏矩阵[^1]。
以下是一个示例代码,展示如何使用 `blkdiag` 函数从不同大小的矩阵创建分块对角矩阵:
```matlab
clc; clear;
% 定义三个不同大小的矩阵
A1 = ones(2, 2);
A2 = 2 * ones(3, 2);
A3 = 3 * ones(2, 3);
% 使用 blkdiag 创建分块对角矩阵
B = blkdiag(A1, A2, A3);
disp(B);
```
运行上述代码后,矩阵 `B` 的结果如下:
```
B =
1 1 0 0 0 0 0
1 1 0 0 0 0 0
0 0 2 2 0 0 0
0 0 2 2 0 0 0
0 0 2 2 0 0 0
0 0 0 0 3 3 3
0 0 0 0 3 3 3
```
当需要创建包含大量对角块的分块对角矩阵时,手动输入每个矩阵会变得不切实际。此时可以利用循环结构动态生成分块对角矩阵。例如,以下代码展示了如何通过循环重复添加相同的矩阵块到分块对角矩阵中:
```matlab
clc; clear;
N = input('请输入对角块的数量 N=');
A = [1, 2; 3, 4]; % 定义基础矩阵块
D = []; % 初始化空矩阵
for ii = 1:N
D = blkdiag(D, A); % 动态添加矩阵块
end
disp(D);
```
此外,还可以通过 `cell` 数组结合 `cell2mat` 函数实现更灵活的分块对角矩阵构造[^2]。核心思想是将对角线位置填充为所需的矩阵块,非对角线位置填充为零矩阵,最后将 `cell` 数组转换为完整矩阵。以下是具体实现:
```matlab
clc; clear;
N = input('请输入对角块的数量 N=');
A = [1, 2; 3, 4]; % 定义基础矩阵块
C = cell(1, N); % 初始化 cell 数组
for ii = 1:N
C{ii} = A; % 将矩阵块放入 cell 数组
end
D = blkdiag(C{:}); % 使用 blkdiag 构造分块对角矩阵
disp(D);
```
对于更复杂的场景,例如需要沿对角线翻转矩阵或处理特殊形式的矩阵(如秩不超过 1 的矩阵),可以参考补充说明中的数学推导[^4]。例如,所有元素全为 `a` 的矩阵可以表示为 \( A = a \mathbf{e} \mathbf{e}' \),其中 \( \mathbf{e} \) 是所有分量均为 1 的列向量。这种表达方式有助于理解矩阵的结构及其特征值分布。
阅读全文
相关推荐


















