DfExpr : 式の微分を求める

このアプリケーションは、主として、自動的に式の微分を計算するプログラムです。 ソースコードは C++ で記述されており、 そのライブラリとして、以下のクラスが用意されています。

ただし、あまり大規模なものは想定していません。 フリーで公開しているのは、極簡単なものです。


◆ ソースファイル

このプログラムのソースファイルは、以下から取得できます。

DfExpr-0.0.3 (tar + gzip)

(ftp をちゃんと設定している人でないと取得できないかも ...)

このプログラムは以下の環境でテストされています。

Debian GNU/Linux 2.2 (potato)
OS
Linux 2.2.19
libc
glibc-2.1.3
コンパイラ
gcc-2.95.2 (gcc/g++), flex-2.5.4a, bison-1.28

◆ 使い方

このソフトには、まだロクなドキュメントは付いていません。 要望を多ければ何とかしようと思いますが、今のところ優先順位は低いです。

◇ dfexpr の極簡単な使い方

まず 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 がソースファイルのアーカイブに含まれているので、 参考にしてください。


◇ ライブラリ DfExpr の使い方

このライブラリを使うには 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 で配布される フリー (自由) なプログラムです。 このプログラムを使用したことにより何らかの損失が発生しても 作成者は一切責任を持ちません。使用は各自の責任において行なって下さい。 ただし、バグレポートやパッチは大歓迎ですし、 質問や要望等についても気軽に御連絡ください。


◆ リンク

最小二乗法関連
算数の時間 〜 最小二乗法 〜
基本的な説明。
多変数線形最小二乗法汎用プログラム 「LLSQ」
LLSQ の説明。QR 分解 (Gram-Schmidt 法) など。
Numerical Recipes in C
15.5 Nonlinear Models 681 に Levenberg-Marquardt Method がある。
最小二乗法による係数の推定
最小二乗法の説明と MATLAB による解法
最小自乗法 (OLS)
pdf と pdf を gif にしたものがある。

横田 義徳 <yokota@yynet.tama.tokyo.jp>