我们如何在MATLAB中有效地存储块三对角矩阵?

时间:2017-01-30 22:39:37

标签: matlab matrix

我正在解决一个线性系统,其中矩阵是块三对角线。设B是99×99三对角矩阵,主对角线上有4个,两个子对角线上有-1,让我成为99乘99的单位矩阵。我想存储大小为99 ^ 2乘99 ^ 2的块三对角矩阵A,主对角线为B,子对角线为-I。最有效的方法是什么?我想出了一个方法:

t1=ones(99,1);
t2=ones(98,1);
B=4*diag(t1)-diag(t2,-1)-diag(t2,1);
I=diag(t1);
Bp=repmat({B}, 99, 1);
M = blkdiag(Bp{:});
t3=ones(9702,1);
I=zeros(9801)-diag(t3,-99)-diag(t3,99);
A=M+I;

我不确定这是否是最有效的方法。还有其他任何可行的方法吗?

1 个答案:

答案 0 :(得分:4)

使用spdiags的这个怎么样:

B_size = 99;
A_size = B_size^2;

v = ones(A_size,1);
D = [v*-1, v*-1, v*4, v*-1, v*-1];
A = spdiags(D, [-B_size, -1, 0, 1, B_size], A_size, A_size);

这是B_size = 4的示例输出:

D =

  -1  -1   4  -1  -1
  -1  -1   4  -1  -1
  -1  -1   4  -1  -1
  -1  -1   4  -1  -1
  -1  -1   4  -1  -1
  -1  -1   4  -1  -1
  -1  -1   4  -1  -1
  -1  -1   4  -1  -1
  -1  -1   4  -1  -1
  -1  -1   4  -1  -1
  -1  -1   4  -1  -1
  -1  -1   4  -1  -1
  -1  -1   4  -1  -1
  -1  -1   4  -1  -1
  -1  -1   4  -1  -1
  -1  -1   4  -1  -1

每列代表稀疏矩阵中的对角线。调用[-B_size -1 0 1 B_size]时的第二个参数spdiags告诉它将每列放在哪个对角线上(负数低于主对角线,上面是正数)。列向量中的不需要的值(负对角线的底部值,正对角线的顶部值)将被忽略。

A是一个稀疏矩阵,因此我会显示full(A),以便您可以看到它实际上是什么样的:

>> full(A)
ans =

   4  -1   0   0  -1   0   0   0   0   0   0   0   0   0   0   0
  -1   4  -1   0   0  -1   0   0   0   0   0   0   0   0   0   0
   0  -1   4  -1   0   0  -1   0   0   0   0   0   0   0   0   0
   0   0  -1   4  -1   0   0  -1   0   0   0   0   0   0   0   0
  -1   0   0  -1   4  -1   0   0  -1   0   0   0   0   0   0   0
   0  -1   0   0  -1   4  -1   0   0  -1   0   0   0   0   0   0
   0   0  -1   0   0  -1   4  -1   0   0  -1   0   0   0   0   0
   0   0   0  -1   0   0  -1   4  -1   0   0  -1   0   0   0   0
   0   0   0   0  -1   0   0  -1   4  -1   0   0  -1   0   0   0
   0   0   0   0   0  -1   0   0  -1   4  -1   0   0  -1   0   0
   0   0   0   0   0   0  -1   0   0  -1   4  -1   0   0  -1   0
   0   0   0   0   0   0   0  -1   0   0  -1   4  -1   0   0  -1
   0   0   0   0   0   0   0   0  -1   0   0  -1   4  -1   0   0
   0   0   0   0   0   0   0   0   0  -1   0   0  -1   4  -1   0
   0   0   0   0   0   0   0   0   0   0  -1   0   0  -1   4  -1
   0   0   0   0   0   0   0   0   0   0   0  -1   0   0  -1   4