Create a Loop for this process

2 ビュー (過去 30 日間)
DARLINGTON ETAJE
DARLINGTON ETAJE 2021 年 6 月 23 日
コメント済み: Stephen23 2021 年 6 月 24 日
I have a process which works fine. You can see the code below. I need to create a loop for the process. I need the loop to take in multiple number of c. c is usually a 3 by 3 matrix. L is usual a 1 by 12 matrix.
n=3;
c1=[12 40 13;10 11 70;80 9 1]; % C matrix for member 1
c2=[0 0 -1;0 1 0;1 0 0]; % C matrix for member 2
c3=[0 1 0;0 0 1;1 0 0]; % C matrix for member 3
L1=[13 14 15 16 17 18 1 2 3 4 5 6]; % for member 1
L2=[1 2 3 4 5 6 7 8 9 10 11 12]; % for member 2
L3=[19 20 21 22 23 24 7 8 9 10 11 12]; % for member 3
L=[L1;L2;L3];
T1=zeros(size(L1,1));
T2=zeros(size(L2,1));
T3=zeros(size(L3,1));
for i=1:n
for j=1:n
T1(i,j)=c1(i,j);
T1(i+3,j+3)=c1(i,j);
T1(i+6,j+6)=c1(i,j);
T1(i+9,j+9)=c1(i,j);
T2(i,j)=c2(i,j);
T2(i+3,j+3)=c2(i,j);
T2(i+6,j+6)=c2(i,j);
T2(i+9,j+9)=c2(i,j);
T3(i,j)=c3(i,j);
T3(i+3,j+3)=c3(i,j);
T3(i+6,j+6)=c3(i,j);
T3(i+9,j+9)=c3(i,j);
end
end
  5 件のコメント
DARLINGTON ETAJE
DARLINGTON ETAJE 2021 年 6 月 24 日
Thank you so much DGM. this is absolutely correct. I am looking for how to accept your answer...
I am grateful.
The only thing left is to find a way to create variabe names to assign each 12 by 12 matrices so I dont have 3D variables....is that even possible?
Stephen23
Stephen23 2021 年 6 月 24 日
"The only thing left is to find a way to create variabe names to assign each 12 by 12 matrices so I dont have 3D variables....is that even possible?"
Of course it is possible, if you want to force yourself into writing slow, complex, inefficient code that is difficult to debug:
The neat, simple, very efficient approach is to use indexing, just as DGM has already correctly advised you.

サインインしてコメントする。

回答 (1 件)

DGM
DGM 2021 年 6 月 24 日
Generally, using a bunch of numbered variables is something you should try to avoid.
That said, you can make the above code into a function that will return a variable length list of T arrays for an equal-length list of C arrays.
C1 = rand(3,3);
C2 = rand(3,3);
dn = 4;
% output list length should be same as number of Cn arrays
[T1 T2] = makebdiag(dn,C1,C2)
function varargout = makebdiag(dn,varargin)
varargout = cell(size(varargin));
for n = 1:numel(varargin)
arglist = repmat(varargin(n),[1 dn]);
varargout{n} = blkdiag(arglist{:});
end
end

カテゴリ

Help Center および File ExchangeCreating and Concatenating Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by