矢量化matlab功能

时间:2013-10-27 18:54:34

标签: matlab loops vectorization cosine

我正在编写一个函数来获取给定数组的余弦值。它工作但我现在使用循环来迭代数组中的每个值,而我确信它可以被矢量化。

目前代码是:

for i = 1:numel(x)
    cos(i) = (sum(((-1).^(0:n)).*(x(i).^(2*(0:n)))./(factorial(2*(0:n)))));
end

我无法为我的生活思考它是如何矢量化的,所以任何帮助都会受到赞赏。

编辑:这是完整的函数http://pastebin.com/n1DG6nUv

第二次编辑:使用不会覆盖cos的新代码更新链接。

1 个答案:

答案 0 :(得分:1)

以下是使用bsxfungamma的一种方式:

v = 0:n;
fcos = zeros(size(x));
fcos(:) = sum(bsxfun(@times,bsxfun(@power,x(:),2*v),(-1).^v./gamma(2*v+1)),2)

本着学习的精神,请注意您的问题中的代码有几个问题。首先,您不预先分配内存。其次,你正在覆盖cos函数,这可能不是一个好主意。另外,我认为使用gamma(n+1)代替factorial(n)会更快。最后,有许多不必要的括号使代码难以阅读。