矢量化标量代码

时间:2012-02-11 21:35:01

标签: matlab

假设我们想在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

我怎么能这样做,函数可以用于数组?

3 个答案:

答案 0 :(得分:3)

您需要添加元素操作符:

stir=@(n)sqrt(2*n*pi) .* exp(-n) .* n.^n .* exp(1./(12*n));

现在搅拌([2 3 5])将起作用。

答案 1 :(得分: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]);

这种方法不会使用逐元素运算符来混淆函数。

答案 2 :(得分:1)

您需要调查以元素为单位的运算符,例如.*./。请参阅http://www.mathworks.co.uk/help/techdoc/ref/arithmeticoperators.html