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

◆ lmder1_r()

void lmder1_r ( int  m,
int  n,
double  x[],
double  fvec[],
int  ldfjac,
double  fjac[],
double  tol,
int  ipvt[],
double  work[],
int  lwork,
int *  info,
double  xx[],
double  yy[],
int *  irev 
)

非線形最小二乗法 (レーベンバーグ・マルカート法) (シンプルドライバ) (リバースコミュニケーション版)

目的
lmder1_rはm個のn変数非線形関数の二乗和の最小点をレーベンバーグ・マルカート法により求める.
min Σfi(x1, x2, ..., xn)^2 (ただし, Σは i = 1 〜 m)
irevに従って関数値およびヤコビ行列をユーザーが与える必要がある.

lmder1_rは, ftol = tol, xtol = tol, gtol = 0, maxfev = 100*(n+1), mode = 1, factor = 100, nprint = 0 としてlmder_rを呼び出すのに相当する.
引数
[in]m関数の数. (m > 0)
[in]n変数の数. (0 < n <= m)
[in,out]x[]配列 x[lx] (lx >= n)
[in] 初期近似解.
[out] irev = 0: 求められた解ベクトル.
  irev = 30: ヤコビ行列を求める点.
[out]fvec[]配列 fvec[lfvec] (lfvec >= m)
irev = 0: 求められた解ベクトルx[]における関数値.
[in]ldfjac二次元配列fjac[][]の整合寸法. (ldfjac >= m)
[in,out]fjac[][]配列 fjac[lfjac][ldfjac] (lfjac >= n)
[in] irev = 30: 再呼び出し時にx[]におけるヤコビ行列(∂fi/∂xj)を与えること.
[out] irev = 0: 上部の n x n 部分に, 対角要素の絶対値が昇順になるように並べ替えを行った上三角行列 R が入る.
    P^T * (J^T * J)*P = R^T * R
  ここで, P は並べ替えを表す置換行列, J は最終的に求められたヤコビ行列である.
[in]tol二乗和および解の相対誤差の許容値. (tol >= 0)
[out]ipvt[]配列 ipvt[lipvt] (lipvt >= n)
置換行列を定義するピボット情報.
[out]work[]配列 work[lwork]
作業領域.
info = 0の場合, work[0]にサブコードを返す.
= 1: 二乗和の相対減少値およびその予想値の両方がftol以下になった.
= 2: 連続する2回の反復の相対誤差がxtol以下になった.
= 3: 上の2つ共満たした.
[in]lwork配列 work[] の大きさ. (lwork >= 5*n + m)
[out]info= 0: 正常終了 (サブコードをwork[0]に返す)
= -1: 入力パラメータ m の誤り (m < n)
= -2: 入力パラメータ n の誤り (n <= 0)
= -5: 入力パラメータ ldfjac の誤り (ldfjac < m)
= -6: 入力パラメータ tol の誤り (tol < 0)
= -10: 入力パラメータ lwork の誤り (lworkが小さすぎる)
= 1: 関数評価回数(irev=1, 2)がmaxfevに達した
= 2: 残差二乗和が減少しなくなった (ftolが小さすぎる)
= 3: 解が改善されなくなった (xtolが小さすぎる)
= 4: Fvecとヤコビ行列の列が計算機イプシロン内で直交した (gtolが小さすぎる)
[out]xx[]配列 xx[lxx] (lxx >= n)
irev = 1または2の場合, 関数値を求めるべき点を返す.
[in]yy[]配列 yy[lyy] (lyy >= m)
irev = 1または2の場合, 再呼び出し時に関数値 fi(xx[]) (i = 1〜m) を与えること.
[in,out]irevリバースコミュニケーションの制御変数.
[in] 最初の呼び出し時に 0 に設定しておくこと. 2回目以降の呼び出し時には値を変更してはならない.
[out] 0 以外の時には下記処理を行ってから再び本ルーチンを呼び出すこと.
= 0: 処理終了. 正常終了かどうかはinfoをチェックすること.
= 1, 2: xx[]における関数値を求め yy[]に設定すること. yy[]以外の変数を変更してはならない.
= 30: x[]におけるヤコビ行列を求め fjac[][]に設定すること. fjac[][]以外の変数を変更してはならない.
出典
netlib/minpack