如何在MATLAB中用cumsum实现1到5的累加求和?代码问题求解
问题分析与解决方案
咱们先拆解下你代码里的问题,再一步步解决~
- 你在循环里每次执行
b = i,此时b只是单个数值(第一次是1,第二次是2…第五次是5) - 调用
cumsum(b)时,因为cumsum对单个数值的累加结果就是它本身,所以每次循环a都会被重新赋值为当前的i,循环结束后a自然就是最后一次的5,这就是输出5.000000的原因。
下面给你几种能得到正确累加结果的方法:
方法1:直接在循环中累加(最简单高效)
初始化一个累加变量a为0,每次循环把当前的i加到a上:
a = 0; for i = 1 : 5 a = a + i; end fprintf('%f\n', a);
循环结束后,a就是1+2+3+4+5的总和15,完全符合你的预期。
方法2:用cumsum实现(保留你想用这个函数的需求)
如果一定要用cumsum,你需要先把所有要累加的数存成数组,再对数组做累加,最后取累加结果的最后一个元素:
b = []; % 初始化空数组 for i = 1 : 5 b = [b, i]; % 把每次的i添加到数组b中 end a = cumsum(b); % 对数组b累加得到[1,3,6,10,15] fprintf('%f\n', a(end)); % 取最后一个元素15输出
你之前把a = cumsum(b)写在循环外不行,是因为当时的b只是循环最后一次的单个数值5,而非包含1到5的数组,所以cumsum处理后还是5。
方法3:不用循环,直接用MATLAB向量运算(更简洁)
MATLAB天生擅长向量操作,完全可以不用循环实现:
a = sum(1:5); % 直接计算1到5的总和 fprintf('%f\n', a);
或者用cumsum的写法:
a = cumsum(1:5); fprintf('%f\n', a(end));
这种方式代码更简洁,运行效率也更高~
内容的提问来源于stack exchange,提问作者ONION
相关产品推荐
相关产品推荐

