このアプリケーションは、主として、自動的に式の微分を計算するプログラムです。 ソースコードは C++ で記述されており、 そのライブラリとして、以下のクラスが用意されています。
ただし、あまり大規模なものは想定していません。 フリーで公開しているのは、極簡単なものです。
このプログラムのソースファイルは、以下から取得できます。
(ftp をちゃんと設定している人でないと取得できないかも ...)
このプログラムは以下の環境でテストされています。
このソフトには、まだロクなドキュメントは付いていません。 要望を多ければ何とかしようと思いますが、今のところ優先順位は低いです。
まず dfexpr の使い方ですが、以下のファイルを用意します。
# まずは式 f の定義 f = x^y + y^x - 3 # 値を代入する x := 1 y := 2 eval (f) # 式の評価。つまり定義した式を実際に計算してみる。 # 式 f を x で微分し、その微分を計算してみる。 fx = f:x; eval (fx) # 式 f を y で微分し、その微分を計算してみる。 fy = f:y; eval (fy) # 違う値を代入する x := 2 y := exp(1) # そして、その値でそれぞれを計算してみる eval (f) eval (fx) eval (fy)
ここで、このファイルを入力ファイル (foo.in) して、 以下のように dfexpr を実行します。
% dfexpr < foo.in
入力の、おおよその演算子は見てわかると思います。 注意がいるのは、値の代入には `:=' が、 そして式の微分は `:' を使うことでしょう。
example として、 src/test0.in と src/test1.in がソースファイルのアーカイブに含まれているので、 参考にしてください。
このライブラリを使うには C++ でソースを書く必要があります。
例えば以下のようなソースを書きます。
#include <iostream.h>
#include "DfExpr.h"
int main (int argc, char *argv[])
{
DfExpr x; x.tag ("x"); // 変数 x と y を定義し、タグを付けておく。
DfExpr y; y.tag ("y");
x = 3; // 変数 x と y に値を代入する。
y = 1;
cout << "x = " << x.eval () << endl;
cout << "y = " << y.eval () << endl;
DfExpr z; z.tag ("z"); // 変数 z を定義し、タグを付けておく。
z = x * x + 6.0 * y * y * y; // 変数 z に式を定義する。
cout << "z = " << z.str () << " = " << z.eval () << endl;
cout << "dz/dx = " << z.d (x).str () << " = " << z.deval (x) << endl;
cout << "dz/dy = " << z.d (y).str () << " = " << z.deval (y) << endl;
DfExpr dzdx = z.d (x); // z を x で微分した式を定義する。
cout << "dz/dx = " << dzdx.str () << " = " << dzdx.eval () << endl;
return (0);
}
そしてコンパイルすれば、以下のような結果が得られます。
x = 3 y = 1 z = x * x + 6 * y * y * y = 15 dz/dx = x + x = 6 dz/dy = 6 * y * y + (6 * y + 6 * y) * y = 18 dz/dx = x + x = 6
example として、 lib/test0.C と lib/test1.C がソースファイルのアーカイブに含まれているので、 参考にしてください。
このソフトウェアは GPL version 2 で配布される フリー (自由) なプログラムです。 このプログラムを使用したことにより何らかの損失が発生しても 作成者は一切責任を持ちません。使用は各自の責任において行なって下さい。 ただし、バグレポートやパッチは大歓迎ですし、 質問や要望等についても気軽に御連絡ください。