Location : Home > Languages > Perl > Package Title : Math::SymbolicX::Complex |
![]() |
Math::SymbolicX::Complex - Math::Symbolic パーサの複素数サポート
use Math::Symbolic qw/parse_from_string/; use Math::SymbolicX::Complex; my $formula = parse_from_string('3 * complex(3,2)^2 + polar(1, pi/2)'); print $formula->value(); # '14.9999999997949+37i' を出力する。 # (文句があるなら "pi" の浮動小数表現の不正確さにどうぞ。)
本モジュールは Math::Symbolic がサポートする扱える数値に複素数を追加する。複素数の定数を生成する特殊な関数でMath::Symbolic モジュールのパーサ拡張することで($Math::Symbolic::Parser に格納することで)実現している。(Math::Symbolic::Variable オブジェクトは初期から複素数のオブジェクトを扱うことができるようになっている。)
動機
Math::Symbolic::Parser によりパースされた文字列におけるすべての定数はデフォルトで通常の Perl スカラーにおける定数と関連する値を保持する Math::Symbolic::Constant オブジェクトに変換される。残念なことに、これは数値が実数の浮動小数に限られていることを意味する。
一方、Perlに複素数サポートする恐るべき Math::Complex モジュールがある。Math::Symbolic::Scalar オブジェクトはいかなるオブジェクトも保持できるので、定数の値を保持するのに Perl スカラーを用いる代わりに Math::Complex オブジェクトを用いることで自分のツリーを構成することができる。しかしsince the Math::Symbolic::Parser は Math::Symbolic のインタフェースとしてはるかに便利であるので、パーサへの Math::Complex サポート導入の方法としてはこちらのほうがよいだろう。
使用方法
パーサから取得できる Math::Symbolic ツリーにおける複素数定数を扱うには、この拡張モジュールをロードし、後述する関数をラップするだけでよい。
前述の関数とは complex() とpolar() である。
complex(RE, IM) は複素数の実部と虚部を引数として取る。これは Math::Complex オブジェクトを生成するのに Math::Complex->make(RE, IM) メソッドを利用することを意味する。同様に polar() は Math::Complex で提供される Math::Complex->emake(R, ARG) メソッドを利用する。(極座標表記とは r*e^(i*arg) という表記方法であり、全複素平面をカバーできるので x+i*y 表記と同等である。)
単純な complex(RE, IM) 及び polar(R, ARG) 記法への拡張がいくつか用意されている。基本的な演算('+', '-', '*', '/', '**')及び記号定数 'pi' を RE, IM, R, ARG に用いることができる。これは polar(1, pi/2) は内部では polar(1, 1.5707963267949) として処理されることを意味する。
注意事項:
本モジュールにおけるπ(pi)の浮動小数点表記は正確には程遠いものである。結果として 0 + i は上の例では -3.49148336110938e-015+i となる。もちろん -3.49148336110938e-015 がもっとも0に近い取得可能な数値であるが、== 演算子で確認するとエラーになる。
Copyright (C) 2004 Steffen Mueller
本ライブラリは Perl 本体と同等の条件下で修正/再配布してもよい。
著者には symbolic-module at steffen-mueller dot net でコンタクト可能である。
Please send フィードバック・バグ報告・サポート要請は Math::Symbolic sサポートメーリングリスト math-symbolic-support at lists dot sourceforge dot net に送ってほしい。Math::Symbolic をどのように使っているのかを教えてほしい。ありがとう。
モジュールの開発及び機能拡張に興味を持ったのなら開発者メーリングリスト math-symbolic-develop at lists dot sourceforge dot net にコンタクトを取ってほしい。
本モジュールの最新バージョンは http://steffen-mueller.net または CPAN で入手可能である。
本モジュールを使用するには Math::Complex に精通しておくべきである。なぜなら $formula->value() の呼び出しに対する返り値は Math::Complex オブジェクトであるからである。
また Math::Symbolic 及び Math::Symbolic::Parser にも目を通したほうがよい。
実装の詳細については Math::SymbolicX::ParserExtensionFactory を参照のこと。
![]() |
Updated : 2006/09/04 |