2017-01-22 9 views
1

Ich arbeite gerade mit Чебышёв-Polynomen, rekursiv definierten Polynomen. Für die sehr wahrscheinlich Fall, dass Sie sah, wie sie nie zuvor:Wolfram-Cloud/Mathematica, effektives Arbeiten mit rekursiven Funktionen

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}] 

Und ich fand mich zu fragen, da ich in der Regel mit Python arbeiten, wenn es einen Weg gibt eine Reihe von Funktionen in Wolframs-Wolke zu bauen, erleichtern die verarbeiten.

Also muss ich alle f[n] nur einmal berechnen, so dass ich die Laufzeit ein wenig verbessern und auch den Bereich von n erweitern kann.

+0

Der typische Weg, um dieses Problem in Mathematica zu lösen, ist Memoisierung. http://reference.wolfram.com/language/tutorial/FunctionsThatRememberValuesTheyHaveFound.html – Szabolcs

+0

Gibt es einen Grund, warum Sie nicht die integrierte Funktion 'ChebyshevT' verwenden? Meine naive Erwartung ist, dass die Laufzeit mit wenig Aufwand von Ihnen verbessert wird. –

+0

@HighPerformanceMark Es ist fair zu fragen, also wollte ich a) etwas über die Syntax lernen und b) wollte eigentlich selbst mit dem Polynom herumspielen, damit ich es besser verstehe. –

Antwort

2

Verwenden Sie memoization.

In diesem Fall ist Memoisierung schwieriger als üblich, da wir mit Funktionen arbeiten, nicht mit Funktionswerten.

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

Die Evaluate stellt sicher, dass die Innenseite der Function selbst ausgewertet bekommen vor der Lieferung und Argumente.

+0

Könnte ich fragen, warum Sie '&;' anstelle von ';' –

+0

verwenden Und wo ist eigentlich '#' definiert. Probieren Sie es einfach aus, und es spuckt einige '#' Formel als Ausgabe. –

+0

@PatrickAbraham Suchen Sie nach 'Funktion' und sehen Sie http://reference.wolfram.com/language/tutorial/PureFunctions.html Sie können' # 'oder' & 'in das Dokumentations-Suchfeld eingeben und Sie werden zum entsprechenden Objekt weitergeleitet Seite. Wenn Sie Mathematica lernen, überprüfen Sie immer erst die Dokumentation (vor dem Googlen usw.). Es ist besser als das der meisten anderen Systeme. – Szabolcs

Verwandte Themen