0%

MATLAB生成三对角矩阵

作为计算数学专业,在对微分方程算法求解时,经常会用到矩阵的运算,特别是稀疏矩阵、对称矩阵和对角矩阵的运算,本篇文章旨在介绍用spdiags函数构建稀疏的三对角、五对角矩阵.

编程计算的目标

编程计算的目标有两点:

  • 一是提高运算时间;
  • 二是减少内存消耗

本文构建的稀疏的对角矩阵,把非零元素标记储存,去除零元素的储存,是为了保证第二点.

函数的用法

语法

1
2
3
4
5
Bout = spdiags(A)
[Bout,id] = spdiags(A)
Bout = spdiags(A,d)
S = spdiags(Bin,d,m,n)
S = spdiags(Bin,d,A)

说明

  • Bout = spdiags(A)m×n 矩阵 A 中提取非零对角线,并将其作为 min(m,n)×p 矩阵 Bout 中的列返回,其中 p 是非零对角线的数目。

  • [Bout,id] = spdiags(A) 还返回 A 中非零对角线的对角线编号 idBout 的大小为 min(m,n)×length(id)

  • Bout = spdiags(A,d) 提取由 d 指定的 A 的对角线,并将其作为 min(m,n)×length(d) 矩阵 Bout 的列返回。

  • S = spdiags(Bin,d,m,n) 通过获取 Bin 的列并沿 d 指定的对角线放置它们,来创建一个 m×n 稀疏矩阵 S

  • S = spdiags(Bin,d,A)d 指定的 A 中的对角线替换为 Bin 的列。

实例

构造一个稀疏的8×8三对角矩阵(对角元素依次是2,5,6)

1
2
3
4
5
e1=2*ones(8,1); %生成一个8×1向量,元素全为2
e2=5*ones(8,1); %生成一个8×1向量,元素全为5
e3=6*ones(8,1); %生成一个8×1向量,元素全为6
A=spdiags([e1 e2 e3],[-1 0 1],8,8);%稀疏的8×8三对角矩阵
full(A)%显示三对角全矩阵

运行结果如下:

image-20230401150739972

构造一个稀疏的8×8五对角矩阵(对角元素依次是3,2,1,2,3)

1
2
3
4
5
e1=3*ones(8,1); %生成一个8×1向量,元素全为3
e2=2*ones(8,1); %生成一个8×1向量,元素全为2
e3=1*ones(8,1); %生成一个8×1向量,元素全为1
A=spdiags([e1 e2 e3 e2 e1],[-2 -1 0 1 2],8,8);%稀疏的8×8三对角矩阵
full(A)%显示三对角全矩阵

运行结果如下:

image-20230401151118006

参考文献