2012-02-11 33 views
0

假设我们要计算斯特林近似在MATLAB N个因子,对任意N值的简单计算将是向量化标码

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

,但我们希望与阵列工作过什么吗?比如我们的代码

stir([2 3 5]) 

应该工作,不得不放弃这样

ans = 

    2.0007 6.0006 120.0026 

答案怎么能我这样做,函数可以与数组一起工作?

+0

您也可以在不插入元素明智的操作符的情况下做到这一点。请参阅下面的答案。 – eternaln00b 2012-02-11 22:16:36

回答

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

我知道这一个,但从问题很明显,我想访问每个元素,并计算它的斯特林的近似值,抱歉,但它对我没有多大帮助 – 2012-02-11 21:40:55

+0

@dato:如果你想要上面的代码工作并行数组中的每个元素,那么您肯定需要将其转换为'。*','。/'等。如果这不是问题,那么请编辑您的问题以使其更清楚。 – 2012-02-11 21:42:21

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]); 

这种方法不会使用元素明确的运算符混淆函数。