Calculating a matrix from other matrices

3 visualizaciones (últimos 30 días)
Saleh Msaddi
Saleh Msaddi el 15 de Feb. de 2021
Editada: Matt J el 15 de Feb. de 2021
How can I write the following matrix?
M = [C*B;
C*A*B + C*B;
C*A^2*B + C*A*B + C*B;
.
.
.
C*A^(N-1)*B + C*A^(N-2)*B + ... + C*B];
A, B, and C are 2D arrays with size(A)=(n,n), size(B)=(n,p), and size(C)=(q,n). N is a positive integer.
  1 comentario
Walter Roberson
Walter Roberson el 15 de Feb. de 2021
I posted code for the 2D version of this a couple of years ago, where the values were being copied down the diagonals.
Unfortunately it has been far too long for me to recall the key words that would needed to find it within my other posts :(

Iniciar sesión para comentar.

Respuestas (1)

Matt J
Matt J el 15 de Feb. de 2021
Q=eye(n);
Mcell=cell(n,1);
for i=1:N
Mcell{i}=C*Q*B;
Q=A*Q+Q;
end
M=cell2mat(Mcell);
  2 comentarios
Saleh Msaddi
Saleh Msaddi el 15 de Feb. de 2021
Thanks @Matt J for your answer. However, I tried to execute the code and compre the results but they are not the same (only the first 2 rows are the same)
N = 4;
A = rand(4);
B = rand(4,1);
C = rand(1,4);
[n,p] = size(B);
R = [C*B;
C*A*B + C*B;
C*A^2*B + C*A*B + C*B;
C*A^3*B + C*A^2*B + C*A*B + C*B];
Q=eye(n);
Mcell=cell(n,1);
for i=1:N
Mcell{i}=C*Q*B;
Q=A*Q+Q;
end
M=cell2mat(Mcell);
R == M
Matt J
Matt J el 15 de Feb. de 2021
Editada: Matt J el 15 de Feb. de 2021
Sorry, it should be
N = 4;
A = rand(4);
B = rand(4,1);
C = rand(1,4);
[n,p] = size(B);
R = [C*B;
C*A*B + C*B;
C*A^2*B + C*A*B + C*B;
C*A^3*B + C*A^2*B + C*A*B + C*B];
[Q,Q0]=deal(eye(n));
Mcell=cell(n,1);
for i=1:N
Mcell{i}=C*Q*B;
Q=A*Q+Q0;
end
M=cell2mat(Mcell);
difference=norm(R-M)
difference = 1.8310e-15

Iniciar sesión para comentar.

Categorías

Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by