Location : Home > Languages > Perl > Package Title : Math::Series |
![]() |
Math::Series - 級数の処理
use Math::Series; my $x_n = Math::Series->new( formula => 'n*x', start_value => 1, iteration_var => 'n', previous_var => 'x', start_index => 0, cached => 1 ); print $x_n->next(), "\n" foreach 0..5; # 1, 2, 6, 24... を出力 print $x_n->at_index(3); # 24 を出力
Math::Series は x_(n+1) = 1 / (x_n + 1) のような再帰的定義で数学的級数を表現するクラスを定義する。再帰的定義は、級数の要素に要素を加える形式で記述される。級数においては現在のインデクスに以前の級数の要素を利用することができる。Math::Series オブジェクトの生成はコンストラクタに関するパラグラフで説明する。
Math::Series は再帰的な数列の定義をパースし、修正するために Math::Symbolic を用いる。このことは数列を Math::Symbolic によりパースされる文字列として特定することを意味する。または Math::Symbolic ツリーを直接コンストラクタに与えてもよい。
Math::Series は実装に Math::Symbolic を用いているので、あらゆる結果は数列変数及び繰り返し変数以外の変数も含んでいる Math::Symbolic オブジェクトである。
各 Math::Series オブジェクトは数列の全要素にわたって第一要素(最初の引数で指定される。2番目の引数は new() コンストラクタへのもの)から繰り返しを行う繰り返し変数である。要素は直前の計算だけキャッシュされない限りあらゆる計算済み要素をキャッシュすることもできる。これは繰り返し変数の繰り返し利用のためのショートカットである。
数列の各要素は、それよりも前のものではなく、その直前の要素にしかアクセスできない。
Math::Series 以下の2つのパッケージ変数を定義する。
$Math::Series::Parser
このスカラは式をパースするために Parse::RecDescent パーサを含む。これは Math::Symbolic::Parser 文法から派生したものである。
$Math::Series::warnings
このスカラは Math::Series がキャッシュしていない級数で back() メソッドを用いて実装する際に警告を発するべきか否かを指定する。デフォルトは true である。
new()
Math::Series オブジェクトに対するコンストラクタ。これは2つのパラメータをとる。パラメータは以下の通り。
formula
formula は現在の要素に要素を足しこむ形での数列の再帰的定義である。formula はmay contain コード内のどこででも値を代入できる様々な Math::Symbolic 変数である。ただし2つの特別な変数を含んでいる。0で始まる現在の繰り返し回数と級数の直前の要素である。
formula は Math::Symbolic パーサによりパースされる文字列または Math::Symbolic ツリーとして直接に指定できる。詳しくは Math::Symbolic 及び Math::Symbolic::Parser を参照のこと。
start_value
このパラメータは級数の初期値を定義する。これは start_index パラメータにより級数の最小値として定義される。初期値は妥当な Math::Symbolic ツリーまたは先にコンストラクトされた Math::Symbolic ツリーとしてパースされる文字列である。
以下のパラメータはオプションである。
iteration_var
繰り返し変数は現在のステップを定める Math::Symbolic ツリーにおける変数の名前である。デフォルトの変数名は 'n' である。
妥当な Math::Symbolic 変数でなければならない。(すなわち /[A-Za-z][A-Za-z0-9_]*/ であること。)
previous_var
previous_var パラメータは直前の繰り返しステップを示す変数の名前を設定する。デフォルトの変数名は 'x' で、繰り返し変数と同様の妥当な Math::Symbolic 変数でなければならない。
cached
このパラメータは直接アクセスのために計算済みの要素をキャッシュするか否かを指定する。デフォルトは true である。実行時には cached() メソッドを利用して変更する。
start_index
級数を求める下限。デフォルトは 0 であるが、0 以上の整数を指定することができる。
next()
next() メソッドは級数の次の要素を返し、繰り返し変数を1進める。これは級数の再帰を行うメソッドである。
cached()
キャッシュされていれば true を返し、そうでなければ false を返す。デフォルトでは新しいオブジェクトはキャッシュ実行に指定される。スペースが問題で、一方向に1度しか級数を見ない時にのみキャッシュしないことを選択することを示唆している。.
cached() はキャッシュに関する振る舞いを変更する際に用いられる。引数が true であればキャッシュは実行され、false であれば実行されない。
current_index()
現在の要素のインデクスを返す。すなわち next() メソッドが呼び出されることで返される要素のインデクスを返す。
このメソッドは next() メソッドもより返される次の要素を(再)設定することができる。この場合、最初の引数は適切なインデクスでなければならない。引数が 0 よりも小さければ undef を返し、現在のインデクスを設定しない。
at_index()
このメソッドはメソッドへの引数により示されたインデクス付きで級数要素を返す。繰り返し変数の状態は変更しない。このメソッドはキャッシュしていない場合には極めて動作が遅い。
開始インデクスよりも前になれば undef を返す。
back()
このメソッドは next() メソッドにより直前に返された級数の要素を返す。キャッシュしていない場合には極めて動作が遅いのでデフォルトではこのパフォーマンスに関して警告を表示する。この警告を表示しないようにするには $Math::Series::warnings スカラを false に設定する。
このメソッドは現在の繰り返し級数要素を減らす。
開始インデクスよりも前になれば undef を返す。
Steffen Mueller, <series-module at steffen-mueller dot net>
本モジュールの最新バージョンは http://steffen-mueller.net/ または CPAN で入手可能である。
本モジュールは Math::Sequence に基づいている。 Math::Series で受け入れられた式は Math::Symbolic 及び Math::Symbolic::Parser でも使用可能である。
![]() |
Updated : 2007/02/07 |