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

2 番目の編集: cos を上書きしない新しいコードで更新されたリンク。

4

1 に答える 1

1

bsxfunとを使用する 1 つの方法を次に示し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 に答える