Combining sub-matrices diagonally within a for loop
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
clear all;
clc;
close all;
n=[3 1 2];
for kk=1:length(n)
matrix=zeros(n(kk),n(kk));
for ii=1:n(kk)
for jj=1:n(kk)
val=2*ii+jj;
matrix(ii,jj)=val;
end
end
end
% Dear users, if you put a debug at the very last "end" (row 13), you can
% see that I aim to generate 3 sub-matrices having the size of 3x3, 1x1 and
% 2x2 (see n=[3 1 2]). I want to combine each sub-matrix one each other diagonally.
% I want to get the matrix as a result below:
matrix=[3 4 5 0 0 0;5 6 7 0 0 0;7 8 9 0 0 0;0 0 0 3 0 0;0 0 0 0 3 4;0 0 0 0 5 6];
%Is there any simple way to do it?
%Thanks in advance!
0 Commenti
Risposta accettata
Bruno Luong
il 13 Ago 2019
submats = arrayfun(@(n) 2*(1:n)'+(1:n),[3 1 2],'unif',0)
matrix = blkdiag(submats{:})
4 Commenti
Bruno Luong
il 13 Ago 2019
I actually wait to see what do you learn and how you manage to adatp the above code to this tiny change.
Più risposte (1)
Rengin
il 13 Ago 2019
2 Commenti
Bruno Luong
il 13 Ago 2019
Modificato: Bruno Luong
il 13 Ago 2019
n=[3 1 2];
rad=[0.04 0.02 0.01];
h=[10 12 15];
submats = arrayfun(@(n,r,h) r*h*ones(n),n,rad,h,'unif',0);
...
Vedere anche
Categorie
Scopri di più su Matrices and Arrays 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!