0

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

目前的代码是:

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 的新代码更新链接。

4

1 回答 1

1

bsxfun这是使用and的一种方法gamma

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)会更快。最后,还有许多不必要的括号使代码难以阅读。

于 2013-10-27T19:05:54.763 回答