Location : Home > Languages > Perl > Package Title : Math::Calculus::NewtonRaphson |
![]() |
Math::Calculus::NewtonRaphson - ニュートン・ラフソン法
use Math::Calculus::NewtonRaphson; # オブジェクトの生成 my $exp = Math::Calculus::NewtonRaphson->new; # 変数と式の設定 $exp->addVariable('x'); $exp->setExpression('x^2 - 5') or die $exp->getError; # ニュートン・ラフソン法の適用 my $result = $exp->newtonRaphson(2) or die $exp->getError; print $result; # 1.4142... を出力
本モジュールは代数式を引数にとり、これをパースしてニュートン・ラフソン法によって解を求めるものである。ニュートン・ラフソン法は式の値が0通過するならその点が解であるという事実に基づいている。すなわち
x^2 = 5
であれば
x^2 - 5
を渡して計算する。
演算子 +, -, *, /, ^ 及びそれらを正しい優先順位を含む式を解釈することができる。また関数には ln, exp, sin, cos, tan, sec, cosec, cot, sinh, cosh, tanh, sech, cosech, coth, asin, acos, atan, asinh, acosh, atanh が含まれてもよい。
デフォルトではなし
new
$exp = Math::Calculus::NewtonRaphson->new;
個々の式を保持する新しいニュートン・ラフソンオブジェクトのインスタンスを生成する。
addVariable
$exp->addVariable('x');
式内におけるある文字を変数として設定する。設置対象はアルファベット文字でなければならない。
setExpression
$exp->setExpression('x^2 + 5*x);
人間に可読な形式での式を引数とするが、内部ではツリー構造で保持し、モジュールが処理可能な妥当な式であるかを確認する。計算エンジン部分は文法については厳密であることに注意すること。例えば 5x ではなく 5*x と表記しなければならない。式内に空白を入れてもよいが優先順位には何の影響もない。
計算の優先順位を変更したい場合には括弧を用いる。括弧内の式は常に最初に評価される。モジュールは BODMAS の計算順序に従う。計算に失敗すれば undef を、成功すれば true を返す。
getExpression
$expr = $exp->getExpression;
格納されている、人間に可読な式の表現形を返す。
newtonRaphson
$result = $exp->newtonRaphson($variable, $guess, %mappings);
所与の変数に関してニュートン・ラフソン法を用いて、$guessを初期値として解を求めようとする。mappings ハッシュは数字でない定数と数字として変換しマッピングする。
getTraceback
$exp->getTraceback;
setExpression 及び newtonRaphson が呼び出されたとき、これらの関数の処理内容を記述するために traceback が生成される。エラーが発生した場合には、エラーの原因を特定するためにこの traceback は極めて有用となる。
getError
$exp->getError;
getTraceback 以外のいかなるメソッドが呼び出されたときに、エラーメッセージは生成され、メソッドの実行中に発生したエラーを格納する。エラー発生時にエラーのテキスト表現が格納される。
本モジュールの著者はウェブサイト http://www.jwcs.net/~jonathan/ を持っており、モジュールに関する最新情報と、ユーザがモジュールの動きを確認できるウェブベースのフロントエンドを準備している。
Jonathan Worthington, <jonathan@jwcs.net>
Copyright (C) 2004 by Jonathan Worthington
本ライブラリはフリーソフトウェアであり、 Perl 本体と同等の条件で修正/再配布することができる。Perl は バージョン 5.8.5 またはユーザの選択でPerl 5 のそれ以降のバージョンで利用可能である。
【訳注と解説】
![]() |
Updated : 2006/08/23 |