matlab中sum函数

求和等问题时,如1+2+……+100000,Matlab中为何用sum要比for快很多,sum函数的代码是怎样的,里面没有用到循环吗?... 求和等问题时,如1+2+……+100000,Matlab中为何用sum要比for快很多,sum函数的代码是怎样的,里面没有用到循环吗? 展开
 我来答
zhouw06
推荐于2017-09-07 · TA获得超过462个赞
知道小有建树答主
回答量:231
采纳率:0%
帮助的人:274万
展开全部
下面是matlab中sum函数的代码,可以看出里面也是用for循环实现的~~

function s = sum(A,dim)
%SUM Sum of the elements.
% For vectors, SUM(X) is the sum of the elements of X.
% For matrices, SUM(X) or SUM(X,1) is a row vector of column sums
% and SUM(X,2) is a column vector of row sums.
%
% See also SYM/PROD.

% Copyright 1993-2008 The MathWorks, Inc.

if isscalar(A) && strcmp(class(A.s),'maplesym')
if nargin == 1
s = sym(sum(A.s));
else
s = sym(sum(A.s,dim));
end
elseif nargin == 1 && any(size(A) == 1)
s = sym(0);
for k = 1:numel(A)
s = s + A(k);
end
elseif nargin == 1 || dim == 1
s = sym(zeros(1,size(A,2)));
for i = 1:size(A,1)
s = s + A(i,:);
end
else
s = sym(zeros(size(A,1),1));
for j = 1:size(A,2);
s = s + A(:,j);
end
end
追问
没有完全看懂,既然也用到for,那为何速度差了几十倍呢
追答
MATLAB变量的基本类型是矩阵,当对矩阵的每个元素循环处理时,运算速度很慢。因此编程时应尽量把数组和矩阵看作一个整体来进行编程,而不是像其他的程序设计语言那样,使用循环结构对矩阵的元素循环进行处理。利用MATLAB提供的用于矢量化操作的函数,把循环矢量化,这样既可以提高编程效率,也可以提高程序的执行效率。下面给出一个循环的例子:
i=0;
for n = 0:0.1:100
i=i+1;
y(i)=cos(n)
end
上述程序段把数组中的每个元素都进行函数值计算,这样会耗费大量的运算时间,我们可以把数组看作一个整体来处理,计算函数值,可以修改这个程序段如下。
n = 0:0.1:100;
y = cos(n)
通过使用MATLAB专门提供的测试程序运行时间的函数,可以发现,把数组看作一个整体,进行操作后,执行效率提高约300倍。
另外,在必须使用多重循环的情况下,建议在循环的外环执行循环次数少的,内环执行循环次数多的,这样也可以显著提高程序执行速度。

此外,M文件是逐句解释执行的,内核函数都是已经编译好的,这也是使用内核函数效率比较高的原因之一
谋先小铺
2011-12-18 · TA获得超过825个赞
知道小有建树答主
回答量:211
采纳率:0%
帮助的人:51.1万
展开全部
Matlab中的sum是一个集合求和的函数,
不过它有做一些特殊处理,比如是1,2,3,。。。。N时,
则是直接用公式推导的:
(N+1)/ 2 * N
追问
如果不是1,2,3,。。。。N时,那怎么办,它的特殊处理是什么,更优的算法吗?
追答
如果是随机数的话,那只能用for或while来一个个相加了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
冰蝶玉涵
2011-12-18
知道答主
回答量:41
采纳率:0%
帮助的人:24.1万
展开全部
sun函数是直接进行两个数的加法,而for则是进行循环之后才开始加法运算的,而且for进行循环时是要先把数据调到缓存区中才开始进行运算的,这是要需时间的,所以要比sum慢很多。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
20078004058
2011-12-18 · TA获得超过673个赞
知道小有建树答主
回答量:270
采纳率:0%
帮助的人:286万
展开全部
matlab都是基于矩阵操作的,对循环不太擅长
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
暗影之王01
推荐于2017-10-12 · TA获得超过5.6万个赞
知道大有可为答主
回答量:2万
采纳率:29%
帮助的人:4701万
展开全部
作用:返回某一单元格区域中数字、逻辑值及数字的文本表达式之和。如果参数中有错误值或为不能转换成数字的文本,将会导致错误。
1、逻辑值及数字的文本表达式将被计算。
2、如果参数为数组或引用,只有其中的数字将被计算。数组或引用中的空白单元格、逻辑值、文本将被忽略。
3、如果参数中有错误值或为不能转换成数字的文本,将会导致错误。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式