数値計算ライブラリ

■ FADBAD++
http://www.fadbad.com/fadbad.html

C++言語のテンプレートを活用した微分計算ライブラリ。オープンソース
最適化計算では、目的関数の微分値を求める必要が生じるけど、それを自分で実装するのは手間がかかる。
FADBAD++では、目的関数を記述するだけで、その微分計算が自動でできてしまう。
微分のチェーンルール(参照)を使って、精度よく値を求められる。

例:
目的関数を次のように定義しておく

B<double> func(const B<double>& x, const B<double>& y)
{
	B<double> z=sqrt(x);
	return y*z+sin(z);
}

以下のような短い記述でxおよびyで微分した値が求まってしまう。

	B<double> x,y,f;    // Declare variables x,y,f
	x=1;                // Initialize variable x
	y=2;                // Initialize variable y
	f=func(x,y);        // Evaluate function and record DAG
	f.diff(0,1);        // Differentiate f (index 0 of 1)
	double fval=f.x();  // Value of function
	double dfdx=x.d(0); // Value of df/dx (index 0 of 1)
	double dfdy=y.d(0); // Value of df/dy (index 0 of 1)


■ Ipopt (Interior Point OPTimizer)
https://projects.coin-or.org/Ipopt

C++言語による、非線形最適化問題のソルバ。オープンソース

数理最適化の実践ガイド (KS理工学専門書)

数理最適化の実践ガイド (KS理工学専門書)

工学のための関数解析 (工学のための数学)

工学のための関数解析 (工学のための数学)