Tridiagonal Matrix with subdiagonal and main diagonal is also matrix

11 次查看(过去 30 天)
I have two matrices A and B. I want A to be main diagonal and B to be my subdiagonals. How do I create such a matrix? By the way sizes of A and B changes but they are square matrices.
Specifically, a1=4,b1=-1
A =diag(a1*ones(1,N-1)) + diag(b1*ones(1,N-2),1) + diag(b1*ones(1,N-2),-1)
B=(-1)*eye(N-1)
These are my A and B matrices. I need to define a (N-1)*(N-1) times (N-1)*(N-1) matrix . For example for N=1000 or N=5000 I should be able to change the N value.
  14 个评论
Mücahit Özalp
Mücahit Özalp 2021-5-14
编辑:Mücahit Özalp 2021-5-14
@Matt JIt's me again now I can form the matrix for N=5000 but I need to evaluate its smallest 10 eigenvalues using E=eigs(D,10,'smallestabs'); I get out of memory error. Is there a way to solve that.
Matt J
Matt J 2021-5-14
I don't think so, but if you post a new question on it (ideally with a demo), others on the forum may have some thoughts.

请先登录,再进行评论。

采纳的回答

Matt J
Matt J 2021-5-12
编辑:Matt J 2021-5-12
So, you want a block Toeplitz matrix?
N = 5;
A =diag([7 4 4]);
B=[8 8 10; 2 5 2; 10 8 7];
C=zeros(3);
blocks={C,B,A};
result=cell2mat(blocks( toeplitz(1+[2,1,zeros(1,N-2)]) ))
result = 15×15
7 0 0 8 8 10 0 0 0 0 0 0 0 0 0 0 4 0 2 5 2 0 0 0 0 0 0 0 0 0 0 0 4 10 8 7 0 0 0 0 0 0 0 0 0 8 8 10 7 0 0 8 8 10 0 0 0 0 0 0 2 5 2 0 4 0 2 5 2 0 0 0 0 0 0 10 8 7 0 0 4 10 8 7 0 0 0 0 0 0 0 0 0 8 8 10 7 0 0 8 8 10 0 0 0 0 0 0 2 5 2 0 4 0 2 5 2 0 0 0 0 0 0 10 8 7 0 0 4 10 8 7 0 0 0 0 0 0 0 0 0 8 8 10 7 0 0 8 8 10
  8 个评论
Matt J
Matt J 2021-5-12
N = 1000;
a1=4;b1=-1;
A =diag(a1*ones(1,N-1)) + diag(b1*ones(1,N-2),1) + diag(b1*ones(1,N-2),-1);
B=(-1)*speye(N-1) ;
C=sparse(N-1,N-1);
blocks={C,B,sparse(A)};
result=cell2mat(blocks( toeplitz(1+[2,1,zeros(1,N-3)]) ));
whos result
Name Size Bytes Class Attributes result 998001x998001 103680256 double sparse

请先登录,再进行评论。

更多回答(1 个)

Matt J
Matt J 2021-5-12
Here's another way, probably much faster.
N=1000;
a1=4;b1=-1;
A =diag(a1*ones(1,N-1)) + diag(b1*ones(1,N-2),1) + diag(b1*ones(1,N-2),-1);
B=(-1)*eye(N-1);
E0=speye(N);
E1=E0(2:end,1:end-1);
E0=E0(1:end-1,1:end-1);
result=kron(E0,A) + kron(E1,B)+kron(E1.',B);
whos result
Name Size Bytes Class Attributes result 998001x998001 87760160 double sparse

类别

Help CenterFile Exchange 中查找有关 Performance and Memory 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by