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

Matlab循环中通过少量if语句实现分段连续求和的方法

原有代码问题
  • 区间判断存在边界遗漏:当depart_time恰好等于100、200、300等边界值时,无法命中任何判断分支
  • 后续区间求和逻辑错误:仅对当前单个arrival(i)取值计算,没有实现区间范围内的累计,且每次进入分支都会覆盖变量之前的值,无法得到连续累计结果
  • 条件判断重复冗余:多个elseif分支写法重复,后续调整区间边界时需要修改多处代码,容易出错
实现方案

根据需求分两种场景选择写法:

场景1:需要循环过程中动态更新累计值

和第一个分支的逻辑对齐——每遍历到一个元素,就更新当前区间从区间起始位置到当前遍历位置的累计和,直接用如下代码:

arrival=xlsread('tripinfo.xlsx','G:G');
depart_time=xlsread('tripinfo.xlsx','B:B');

% 初始化6个区间的累计值、各区间起始索引
mean_travel = zeros(6,1);
sec_start = ones(6,1);
% 定义区间边界,覆盖所有取值无遗漏
sec_edge = [0, 100, 200, 300, 400, 500, inf];

for i = 1:91
    % 匹配当前值所属区间
    for s = 1:6
        if depart_time(i) >= sec_edge(s) && depart_time(i) < sec_edge(s+1)
            % 计算当前区间从起始点到当前遍历位置的累计和
            mean_travel(s) = sum(arrival(sec_start(s):i, 1));
            % 标记下一个区间的起始位置
            if sec_start(s) == i && i > 1
                sec_start(s+1) = i;
            end
            break
        end
    end
end

% 结果对应关系:
% mean_travel(1) 对应 depart_time ∈ [0,100) 区间累计
% mean_travel(2) 对应 depart_time ∈ [100,200) 区间累计
% mean_travel(3) 对应 depart_time ∈ [200,300) 区间累计
% mean_travel(4) 对应 depart_time ∈ [300,400) 区间累计
% mean_travel(5) 对应 depart_time ∈ [400,500) 区间累计
% mean_travel(6) 对应 depart_time ∈ [500,+∞) 区间累计

场景2:仅需要最终每个区间的arrival总和

不需要写循环,直接用Matlab的逻辑索引筛选对应区间的元素求和即可,代码更简洁,运行效率更高:

arrival=xlsread('tripinfo.xlsx','G:G');
depart_time=xlsread('tripinfo.xlsx','B:B');

mean_travel1 = sum(arrival(depart_time < 100));
mean_travel2 = sum(arrival(depart_time >= 100 & depart_time < 200));
mean_travel3 = sum(arrival(depart_time >= 200 & depart_time < 300));
mean_travel4 = sum(arrival(depart_time >= 300 & depart_time < 400));
mean_travel5 = sum(arrival(depart_time >= 400 & depart_time < 500));
mean_travel6 = sum(arrival(depart_time >= 500));

注意:区间的等号边界可以根据实际需求调整,只要保证所有边界值都能被覆盖、不会出现重复判断即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:48:21