2012-02-11 5 views
0

Предположим, что мы хотим вычислить Стирлинга приближение к п факториал в MATLAB, простой расчет для произвольного п значение будетVectorising код скалярная

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

ответ

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

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

Смежные вопросы