Векторизация скалярного кода - PullRequest
0 голосов
/ 12 февраля 2012

предположим, что мы хотим вычислить приближение Стирлинга к n ​​факториалу в Matlab, простой расчет для произвольного значения 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 ]

3 голосов
/ 12 февраля 2012

Вам нужно добавить поэлементные операторы:

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

Теперь перемешивание ([2 3 5]) будет работать.

2 голосов
/ 12 февраля 2012

Вы также можете сделать это, не вставляя поэлементные операторы в функцию.

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

Этот подход не загромождает функцию поэлементными операторами.

1 голос
/ 12 февраля 2012

Вам необходимо исследовать поэлементные операторы, например, .* и ./.Смотри http://www.mathworks.co.uk/help/techdoc/ref/arithmeticoperators.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...