迭代地将矩阵添加到更大的矩阵中
Adding matrix into bigger matrix iteratively
我正在尝试在 Matlab 中实现一个名为 Gamma 的矩阵。它将包括称为 H 的较小矩阵,如下图所示
我在 Matlab 中实现它时遇到了问题。
我所做的如下:
我创建了一个名为
的函数
function [Gamma] = get_Gamma(N,A,B,Cz)
然后我创建 H 矩阵
for i=1:N
H(:,:,i) = Cz*Ad^(i-1)*Bd;
end
Hn = size(H,1);
Hm = size(H,2);
我的问题是如何进行迭代:
Gamma = [H(:,:,1) zeros(2,2) zeros(2,2)]
Gamma = [Gamma ; H(:,:,2) H(:,:,1) zeros(2,2)]
Gamma = [Gamma ; H(:,:,3) H(:,:,2) H(:,:,1)]
我一直在尝试做这样的事情
Gamma = [];
counter = 1;
for i=1:N
for j=1:N
if i <= counter
Gamma_update = H(:,:,j);
Gamma = [Gamma Gamma_update];
else
Gamma_update = zeros(Hn,Hm);
Gamma = [Gamma Gamma_update];
end
Gamma = [Gamma ; H(:,:,2) H(:,:,1) zeros(2,2)]
end
end
但我知道这是行不通的。希望你能帮我解决这个问题!
我刚刚找到了解决问题的方法,如下所示:
function [Gamma] = get_Gamma(N,Ad,Bd,Czd)
% N: number of impulse response matrices to find Markov Parameters
for i=1:N
H(:,:,i) = Czd*Ad^(i-1)*Bd;
end
Hn = size(H,1);
Hm = size(H,2);
Gamma = [];
counter = 1;
for i=1:N
Gamma_update = [];
for k=N:-1:counter+1
Gamma_update = [zeros(Hn,Hm) Gamma_update];
end
for j=1:counter
Gamma_update = [H(:,:,j) Gamma_update];
end
Gamma = [Gamma ; Gamma_update];
counter = counter + 1;
end
end
我正在尝试在 Matlab 中实现一个名为 Gamma 的矩阵。它将包括称为 H 的较小矩阵,如下图所示
我在 Matlab 中实现它时遇到了问题。
我所做的如下:
我创建了一个名为
的函数function [Gamma] = get_Gamma(N,A,B,Cz)
然后我创建 H 矩阵
for i=1:N
H(:,:,i) = Cz*Ad^(i-1)*Bd;
end
Hn = size(H,1);
Hm = size(H,2);
我的问题是如何进行迭代:
Gamma = [H(:,:,1) zeros(2,2) zeros(2,2)]
Gamma = [Gamma ; H(:,:,2) H(:,:,1) zeros(2,2)]
Gamma = [Gamma ; H(:,:,3) H(:,:,2) H(:,:,1)]
我一直在尝试做这样的事情
Gamma = [];
counter = 1;
for i=1:N
for j=1:N
if i <= counter
Gamma_update = H(:,:,j);
Gamma = [Gamma Gamma_update];
else
Gamma_update = zeros(Hn,Hm);
Gamma = [Gamma Gamma_update];
end
Gamma = [Gamma ; H(:,:,2) H(:,:,1) zeros(2,2)]
end
end
但我知道这是行不通的。希望你能帮我解决这个问题!
我刚刚找到了解决问题的方法,如下所示:
function [Gamma] = get_Gamma(N,Ad,Bd,Czd)
% N: number of impulse response matrices to find Markov Parameters
for i=1:N
H(:,:,i) = Czd*Ad^(i-1)*Bd;
end
Hn = size(H,1);
Hm = size(H,2);
Gamma = [];
counter = 1;
for i=1:N
Gamma_update = [];
for k=N:-1:counter+1
Gamma_update = [zeros(Hn,Hm) Gamma_update];
end
for j=1:counter
Gamma_update = [H(:,:,j) Gamma_update];
end
Gamma = [Gamma ; Gamma_update];
counter = counter + 1;
end
end