如何编写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
相关产品推荐
相关产品推荐

