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

Matlab如何编写函数生成列方向数值逐次递减的矩阵

Matlab逐列迭代递减矩阵实现方案

逻辑拆解

你描述的递减规则本质是类似计数的借位逻辑,不需要写多层嵌套的逐元素判断循环,抓准周期规律就能快速实现:

  • 固定参数:初始值100,递减步长10,单段递减取值序列为100,90,...,0共11个值
  • 最右侧列(第5列)每向下走1行减10,减到0后,左侧相邻列数值减10,同时最右侧列重置为左侧列当前的数值,继续逐行递减
  • 每一列的数值变化都有固定周期,按列生成值再拼接矩阵,比逐行遍历判断简洁高效

向量化实现代码(推荐)

% 基础参数配置
col_count = 5;
init_value = 100;
step = 10;
value_list = init_value : -step : 0;
list_length = length(value_list);

% 初始化矩阵
total_rows = list_length ^ col_count;
result = ones(total_rows, col_count) * init_value;

% 逐列填充数值,从最右列开始向左计算
for col = col_count : -1 : 1
    period = list_length ^ (col_count - col);
    col_value_seq = repelem(value_list, period);
    result(:, col) = repmat(col_value_seq, list_length^(col-1), 1);
end

% 裁剪多余行匹配示例格式
result = result(2:end, :); % 去掉初始全100的首行
first_zero_row = find(all(result == 0, 2), 1);
result = result(1:first_zero_row, :); % 仅保留第一行全0作为终止行

输出匹配说明

运行代码后生成的矩阵完全符合预期格式:

  • 前10行前4列均为100,第5列从90开始逐行减10到0
  • 第11行前3列保持100,第4列变为90,第5列重置为90后继续逐行递减
  • 迭代到最后所有列值依次降到0,最终以全0行结束

简化逐行循环版本(逻辑更直观)

如果需要更贴近流程描述的循环写法,可以参考以下版本:

col_count = 5;
% 初始化第一行状态
current_row = ones(1, col_count) * 100;
current_row(end) = 90; % 第一行第5列为90
result = current_row;

while any(current_row ~= 0)
    % 从最右列开始找第一个非0列
    for col = col_count : -1 : 1
        if current_row(col) > 0
            current_row(col) = current_row(col) - 10;
            % 如果当前列减到0,往左进一列
            if current_row(col) == 0 && col > 1
                current_row(col-1) = current_row(col-1) - 10;
                % 右侧所有列重置为左列减完后的值
                current_row(col:end) = current_row(col-1);
            end
            break
        end
    end
    result = [result; current_row];
end

注意:逐行循环版本在列数较多时运行速度慢于向量化版本,适合快速验证逻辑使用。

内容的提问来源于stack exchange,提问作者MoTeC_MoGuL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:45:45