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

如何编写MATLAB函数将[0,upper]区间划分为指定数量子区间?

解决MATLAB区间划分问题

你不需要单独判断整除性,可以通过计算余数统一处理两种场景:

核心思路:

  • 计算upper除以number的余数rem,这代表有rem个区间的步长为floor(upper/number)+1(比基础步长多1)
  • 剩余number-rem个区间的步长为floor(upper/number)
  • 通过累加这些步长生成整数端点向量x

完整代码

function x = splitInterval(upper, number)
    % 计算基础步长和余数
    base_step = floor(upper / number);
    rem = mod(upper, number);
    
    % 构造每个区间的步长数组:前rem个用base_step+1,剩余用base_step
    steps = [repmat(base_step + 1, 1, rem), repmat(base_step, 1, number - rem)];
    
    % 生成端点向量:从0开始累加步长
    x = [0, cumsum(steps)];
end

测试示例

当upper=11、number=3时:

x = splitInterval(11, 3)
% 输出:x = [0 4 8 11]

完全匹配你的示例要求。

当upper=12、number=3(整除场景):

x = splitInterval(12, 3)
% 输出:x = [0 4 8 12]

和你原有代码的结果一致。

代码说明

  • base_step = floor(upper/number):得到整除时的标准步长,也是非整除时大部分区间的步长
  • rem = mod(upper, number):获取无法均分的剩余长度,对应需要增加步长的区间数量
  • steps数组:按顺序存储每个区间的步长,前rem个区间额外多1个单位长度
  • cumsum(steps):累加步长得到中间端点,加上起始的0后,生成完整的整数端点向量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:55:39