【问题标题】:Adding matrix into bigger matrix iteratively将矩阵迭代地添加到更大的矩阵中
【发布时间】:2021-10-28 19:02:16
【问题描述】:

我正在尝试在 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

但我知道这行不通。我希望你能帮我解决这个问题!

【问题讨论】:

    标签: matlab loops matrix


    【解决方案1】:

    我刚刚设法找到解决问题的方法,如下所示:

    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
    

    【讨论】:

    • 请注意,counter 始终等于您使用它的i,因此您无需将其作为单独的变量保留。
    • 啊,是的,我没注意到,谢谢!
    猜你喜欢
    • 2023-04-05
    • 2017-08-06
    • 1970-01-01
    • 2021-05-11
    • 2014-04-20
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多