2012-02-11 9 views
0

は、任意のn値のための簡単な計算がベクトル化スカラーコード

sqrt(2*n*pi) * exp(-n) * n^n * exp(1/(12*n)) 

しかし、私たちはあまりにも配列で仕事をしたいのだろうか?私たちは、n MathWorks社のMATLABで階乗するスターリング近似を計算したいとたとえば我々のコードのための

stir([2 3 5]) 

が動作し、どのようにすることができます。この

ans = 

    2.0007 6.0006 120.0026 

のような答えを与えるために持っている必要があります私はそのような、関数は配列で動作することができますか?

+0

また、関数内に要素賢明な演算子を挿入しなくてもかまいません。下の私の答えを見てください。 – eternaln00b

答えて

3

あなたは、要素単位の演算子を追加する必要があります。

[email protected](n)sqrt(2*n*pi) .* exp(-n) .* n.^n .* exp(1./(12*n)); 

は今([2 3 5])攪拌動作します。

1

要素ごとの演算子を調べる必要があります。 .*および./である。 http://www.mathworks.co.uk/help/techdoc/ref/arithmeticoperators.htmlを参照してください。

+0

私はこれを知っていますが、質問からは、各要素にアクセスしてスターリングの近似を計算したいと思いますが、申し訳ありませんが、それは私にとってはあまり役に立ちません –

+0

@dato:上記のコードを実行したい場合'。*'、 '。/'などを使用するように変換する必要があります。これが問題でない場合は、質問を編集してより明確にしてください。 –

2

また、関数内に要素ごとの演算子を挿入しなくてもかまいません。

% Create a function handle which takes one argument n and calculates the stirling approx. 
stir = @(n)sqrt(2*n*pi) * exp(-n) * n^n * exp(1/(12*n)) 

% Use "arrayfun" to perform the calculation on each array element. 
arrayfun(stir, [2 3 5]); 

この方法では、要素ごとの演算子で関数が複雑になることはありません。