XLPack 7.0
XLPack 数値計算ライブラリ (C API) リファレンスマニュアル
読み取り中…
検索中…
一致する文字列を見つけられません

◆ optif0()

void optif0 ( int  n,
double  x[],
void(*)(int, double *, double *)  fcn,
double  xpls[],
double *  fpls,
double  work[],
int  lwork,
int *  info 
)

多変数非線形関数の最小点 (準ニュートン法) (シンプルドライバ)

目的
optif0は非線形関数 f(x1, x2, ..., xn) (2階連続的微分可能な実数関数) の局所的最小点 (xs1, xs2, ..., xsn) を求める.

必要な微分係数は有限差分近似で求められる. また, ヘッセ行列はセカント法(BFGS法)で求められる. 探索アルゴリズムとして直線探索が使われる.

optif0は標準パラメータを設定してoptif9を呼び出すのに相当し, 準ニュートン法(BFGS法)のルーチンとして動作する.
引数
[in]n問題の次数(パラメータ数). (n > 1)
[in]x[]配列 x[lx] (lx >= n)
解ベクトルの初期推定値.
[in]fcn目的関数 f(x1, x2, ..., xn) を求めるユーザー定義サブルーチンで, 次のように定義すること.
void fcn(int n, double x[], double *fval)
{
*fval = 与えられたnおよびx[]から求めた関数値
}
fval以外の変数を変更してはならない.
[out]xpls[]配列 xpls[lxpls] (lxpls >= n)
求められた解ベクトル(局所的最小点).
[out]fplsxplsにおける関数値.
[out]work[]配列 work[lwork]
作業領域.
info = 0の場合, サブコードをwork[0]に返す.
= 1: 傾きの収束判定条件を満たした.
= 2: ステップサイズの収束判定値を満たした.
[in]lwork配列 work[]のサイズ. (lwork >= n*(n + 11))
[out]info= 0: 正常終了 (work[0]のサブコードを参照せよ)
= -1: 入力パラメータ n の誤り (n <= 1)
= -7: 入力パラメータ lwork の誤り (lwork < n*(n + 11))
= 1: 最後の更新において目的関数値が減少しなかった(局所的最小点にあるか, 非線形性が強すぎるか, steptlが大きすぎる)
= 2: 最大反復回数(200)を超えた
= 3: ステップサイズが続けて5回stepmxを超えた(関数形が際限なく傾斜しているか, stepmxが小さすぎる)
出典
CMLIB