2017-01-22 24 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]を1回だけ計算しなければならないので、実行時間をかなり改善でき、nの範囲を拡張することもできます。

+0

Mathematicaでこの問題を解決する典型的な方法はメモです。 http://reference.wolfram.com/language/tutorial/FunctionsThatRememberValuesTheyHaveFound.html – Szabolcs

+0

組み込み関数ChebyshevTを使用していない理由はありますか?私の素朴な期待は、これを使用すると実行時間がかなり改善されることです。 –

+0

@HighPerformanceMark質問するのは公正だから、私は文法について何かを学びたいと思っていました。そして、実際に多項式を使って遊んでいたかったので、私はそれをよく理解しています。 –

答えて

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