You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab中迭代拼接子矩阵H生成大矩阵Gamma的实现问题

可行实现代码(两种方案可选)

方案1:预分配内存(运行效率更高,推荐)

function [Gamma] = get_Gamma(N,A,B,Cz)
% 生成所有H子矩阵,注意此处Ad、Bd和输入参数A、B的对应关系,如有误可自行调整
Ad = A; Bd = B;
for i=1:N
   H(:,:,i) = Cz*Ad^(i-1)*Bd;
end
Hn = size(H,1);
Hm = size(H,2);

% 预分配Gamma的内存空间
Gamma = zeros(N*Hn, N*Hm);

for i = 1:N
    % 计算当前块行对应的全局行坐标范围
    row_start = (i-1)*Hn + 1;
    row_end = i*Hn;
    for j = 1:i
        % 计算当前非零块对应的全局列坐标范围
        col_start = (j-1)*Hm + 1;
        col_end = j*Hm;
        Gamma(row_start:row_end, col_start:col_end) = H(:,:, i-j+1);
    end
end
end

方案2:按逐行拼接逻辑实现(和你给出的示例逻辑对齐)

function [Gamma] = get_Gamma(N,A,B,Cz)
% 生成所有H子矩阵,注意此处Ad、Bd和输入参数A、B的对应关系,如有误可自行调整
Ad = A; Bd = B;
for i=1:N
   H(:,:,i) = Cz*Ad^(i-1)*Bd;
end
Hn = size(H,1);
Hm = size(H,2);

Gamma = [];
for i = 1:N
    % 生成当前行的所有块
    cur_row = [];
    for j = 1:N
        if j <= i
            cur_row = [cur_row, H(:,:, i-j+1)];
        else
            cur_row = [cur_row, zeros(Hn, Hm)];
        end
    end
    % 将当前行拼接到Gamma底部
    Gamma = [Gamma; cur_row];
end
end

原代码问题说明

原有代码的核心问题是嵌套循环中行列拼接逻辑混乱,在列拼接的内层循环里错误插入了行拼接操作,同时子矩阵H的索引规则设置错误,导致输出结构不符合要求。

内容的提问来源于stack exchange,提问作者Grétar Már

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:45:04