2017-01-22 1 views
1

저는 현재 재귀 적으로 정의 된 다항식 인 Чебышёв-polynomials로 작업하고 있습니다. 매우 가능성이 경우에 당신은 전에 본 적이 :Wolfram-Cloud/Mathematica, 재귀 함수로 효과적으로 작업하기

f[0,x_] := 1; 
f[1,x_] := x; 
f[n_,x_] := 2 * x * f[n-1, x] - f[n-2, x]; 
Plot[{f[9, x],f[3, x]},{x, -1, 1}] 

그리고 나는 보통 파이썬 작업 이후를 용이하게하기 위해, 텅스텐 - 클라우드 기능의 배열을 구축 할 수있는 방법이 있는지 자신을, 요구 발견 방법.

따라서 모든 f[n]을 한 번만 계산해야하기 때문에 런타임이 상당히 향상되고 n 범위를 확장 할 수 있습니다.

+0

Mathematica에서이 문제를 해결하는 일반적인 방법은 메모입니다. http://reference.wolfram.com/language/tutorial/FunctionsThatRememberValuesTheyHaveFound.html – Szabolcs

+0

'ChebyshevT'라는 내장 함수를 사용하지 않는 이유가 있습니까? 내 순진한 기대는이 부분을 사용하면 약간의 노력으로도 런타임이 상당히 향상된다는 것입니다. –

+0

@HighPerformanceMark 질문하는 것이 공평합니다. 그래서 a) 구문에 대해 배우고 b) 실제로 다항식을 가지고 놀고 싶었 기 때문에 더 잘 이해할 수 있습니다. –

답변

2

memoization을 사용하십시오.

우리는 함수 값이 아닌 함수로 작업하기 때문에이 경우 메모 작성이 보통 때보 다 복잡합니다.

Clear[cheb] 
cheb[0] = 1 &; 
cheb[1] = # &; 
cheb[n_] := cheb[n] = [email protected][2 # cheb[n - 1][#] - cheb[n - 2][#]] & 

EvaluateFunction의 내부도 공급하고 인수하기 전에 평가를 얻을 있는지 확인합니다.

+0

';'대신'&;'를 사용하는 이유를 묻습니다. –

+0

그리고 실제로'# '가 정의되어 있습니다. 그냥 시도해 보았고 출력으로'# 'Formula를 뱉어 버렸습니다. –

+0

@PatrickAbraham'Function'을 찾아 http://reference.wolfram.com/language/tutorial/PureFunctions.html을 참조하십시오. 문서 검색 상자에'#'또는'&'를 입력하면 관련 문서로 이동합니다. 페이지. Mathematica를 배울 때 항상 먼저 문서를 확인하십시오 (인터넷 검색 전에). 다른 대부분의 시스템보다 좋습니다. – Szabolcs

관련 문제