2012-02-11 5 views
0

는, 임의의 n 값에 대한 간단한 계산이vectorising 추상 스칼라 코드

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

하지만 우리가 너무 배열 작업 할 수 있습니까? 우리는 N 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]); 

이 접근 방식은 요소 별 연산자를 사용하여 함수를 복잡하게 만들지 않습니다.

관련 문제