迭代地将矩阵添加到更大的矩阵中

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