作业帮 > 综合 > 作业

matlab中sum函数

来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/04/28 04:23:33
matlab中sum函数
求和等问题时,如1+2+……+100000,Matlab中为何用sum要比for快很多,sum函数的代码是怎样的,里面没有用到循环吗?
matlab中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文件是逐句解释执行的,内核函数都是已经编译好的,这也是使用内核函数效率比较高的原因之一