Using kron to create a large matrix

2 views (last 30 days)
SA
SA on 24 Apr 2019
Commented: SA on 24 Apr 2019
I wrote this code to create a block tridiagonal matrix with I (I is the identity matrix) on the sub-diagoanls and A as the square matrix on the main diagonal.
How do I repeat this process so that I can have the 11 A's on the main diagonal and 10 I's on the subdiagonals. So eventually, i get a larger tridiagonal matrix.
A = [-4 2 0;1 -4 1;0 2 -4]; %main diagonal
B = [0 1 0; 0 0 1; 0 0 0]; %sub-diagonal
W = kron(eye(3),A) + kron(B,eye(3))+ kron(B',eye(3))
  2 Comments
Guillaume
Guillaume on 24 Apr 2019
I'm unclear on what result you want, in particular what the 11 B's refers to. As far as I can tell there's only one B.
SA
SA on 24 Apr 2019
Sorry, I typed the question wrongly.
The code gives me 3 A's on the main diagonal and two I's on the subdiagonals which gives me a tridiagonal matrix but I want a larger matrix with 11 A's on the main diagonal and 10 I's on the subdiagonals. So eventually I get a larger tridiagonal matrix.

Sign in to comment.

Accepted Answer

Andrei Bobrov
Andrei Bobrov on 24 Apr 2019
n = 11;
A = [-4 2 0;1 -4 1;0 2 -4]; %main diagonal
m = size(A,1);
mn = m*n;
o1 = ones(mn,1);
out = full(spdiags([o1,repmat(spdiags(A),n,1),o1],[-3,-1:1,3],mn,mn));

More Answers (0)

Tags

No tags entered yet.

Community Treasure Hunt

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

Start Hunting!