matlab中sum函数

求和等问题时,如1+2+……+100000,Matlab中为何用sum要比for快很多,sum函数的代码是怎样的,里面没有用到循环吗?

下面是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文件是逐句解释执行的,内核函数都是已经编译好的,这也是使用内核函数效率比较高的原因之一

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-12-18
Matlab中的sum是一个集合求和的函数,
不过它有做一些特殊处理,比如是1,2,3,。。。。N时,
则是直接用公式推导的:
(N+1)/ 2 * N追问

如果不是1,2,3,。。。。N时,那怎么办,它的特殊处理是什么,更优的算法吗?

追答

如果是随机数的话,那只能用for或while来一个个相加了

第2个回答  2011-12-18
sun函数是直接进行两个数的加法,而for则是进行循环之后才开始加法运算的,而且for进行循环时是要先把数据调到缓存区中才开始进行运算的,这是要需时间的,所以要比sum慢很多。
第3个回答  2011-12-18
matlab都是基于矩阵操作的,对循环不太擅长
第4个回答  推荐于2017-10-12
作用:返回某一单元格区域中数字、逻辑值及数字的文本表达式之和。如果参数中有错误值或为不能转换成数字的文本,将会导致错误。
1、逻辑值及数字的文本表达式将被计算。
2、如果参数为数组或引用,只有其中的数字将被计算。数组或引用中的空白单元格、逻辑值、文本将被忽略。
3、如果参数中有错误值或为不能转换成数字的文本,将会导致错误。
相似回答