Question on creating dynamic matrix variables
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Tsz Tsun
am 12 Apr. 2024
Kommentiert: Tsz Tsun
am 12 Apr. 2024
Hi all, I would like to know how to write dynamic matrix variables. For example, I have the following:
clear all;
n=11
for i=1:n-1
A1(i,i+1) = 1;
A1(i+1,i) = 1;
end
A1
for i=1:n-2
A2(i,i+2) = 1;
A2(i+2,i) = 1;
end
A2
for i=1:n-3
A3(i,i+3) = 1;
A3(i+3,i) = 1;
end
A3
And I would like to make something like this:
for k=1:1:3
for i=1:n-1
A[k](i,i+1) = 1;
A[k](i+1,i) = 1;
end
end
Or alternatively, is there a neat way to do so?
1 Kommentar
Akzeptierte Antwort
Stephen23
am 12 Apr. 2024
Bearbeitet: Stephen23
am 12 Apr. 2024
"Or alternatively, is there a neat way to do so?"
Of course there is: indexing. Either into a numeric array or into a container array (e.g. a cell array).
Indexing is neat, simple, and efficient. Unlike what you are trying to do.
n = 11; % size of each matrix
D = 2:4; % vector of indices of the 1's
C = cell(size(D));
for k = 1:numel(D)
V = zeros(1,n);
V(D(k)) = 1;
C{k} = toeplitz(V);
end
Checking:
C{1}
C{2}
C{3}
5 Kommentare
Stephen23
am 12 Apr. 2024
Either modify the TOEPLITZ call with two vector inputs, or call DIAG:
n = 11; % size of each matrix
D = 1:3; % offset of the diagonal
C = cell(size(D));
for k = 1:numel(D)
C{k} = diag(ones(1,n-D(k)),D(k));
end
C{1}
C{2}
C{3}
Weitere Antworten (1)
Taylor
am 12 Apr. 2024
May be worth looking into structures instead of matrices. https://www.mathworks.com/help/matlab/matlab_prog/generate-field-names-from-variables.html
0 Kommentare
Siehe auch
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!