Info
This question is locked. Riaprila per modificarla o per rispondere.
Tridiagonal Matrix with subdiagonal and main diagonal is also matrix
16 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Mücahit Özalp
il 12 Mag 2021
Locked: Steven Lord
il 13 Lug 2024 alle 21:29
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 Commenti
Matt J
il 14 Mag 2021
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.
Risposta accettata
Matt J
il 12 Mag 2021
Modificato: Matt J
il 12 Mag 2021
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)]) ))
8 Commenti
Matt J
il 12 Mag 2021
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
Più risposte (1)
Matt J
il 12 Mag 2021
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
1 Commento
This question is locked.
Vedere anche
Categorie
Scopri di più su Operating on Diagonal Matrices in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!