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

◆ hybrd_r()

void hybrd_r ( int  n,
double  x[],
double  fvec[],
double  xtol,
int  maxfev,
int  ml,
int  mu,
double  epsfcn,
double  diag[],
int  mode,
double  factor,
int  nprint,
int *  nfev,
double  work[],
int  lwork,
int *  info,
double  xx[],
double  yy[],
int *  irev 
)

非線形連立方程式 (ハイブリッド法) (ヤコビ行列計算不要) (リバースコミュニケーション版)

目的
hybrd_rはn本のn変数非線形方程式よりなる連立方程式
fi(x1, x2, ..., xn) = 0 (i = 1 〜 n)
の解をパウエルのハイブリッド法により求める.

irevに従って関数値をユーザーが与える必要がある. ヤコビ行列はルーチン内で前進差分により計算されるため, ユーザーがヤコビ行列を求める必要はない.
引数
[in]n未知数および方程式の数. (n > 0)
[in,out]x[]配列 x[lx] (lx >= n)
[in] 初期近似解.
[out] irev = 0: 求められた解ベクトル.
  irev = 50, 51: 最新の近似解.
[out]fvec[]配列 fvec[lfvec] (lfvec >= n)
irev = 0: 求められた解ベクトルx[]における関数値.
irev = 50, 51: 最新の近似解における関数値.
[in]xtol目標精度. 続く2回の反復間の相対誤差がxtolより小さくなったら終了する. (xtol >= 0)
[in]maxfev関数評価回数(irev=1〜4)の上限値. これを超えると終了する. (maxfev > 0)
[in]mlヤコビ行列が帯行列の場合, 下帯幅を設定する(ml >= 0). 帯行列でない場合, n - 1 以上を設定する.
[in]muヤコビ行列が帯行列の場合, 上帯幅を設定する(mu >= 0). 帯行列でない場合, n - 1 以上を設定する.
[in]epsfcn前進差分近似のステップ幅を決めるパラメータで目的関数計算の相対誤差程度に設定する. マシンイプシロンより小さい値が設定された場合, マシンイプシロン値とみなされる.
[in,out]diag[]配列 diag[ldiag] (ldiag >= n)
[in] mode = 2 の場合にスケーリング因子を入力する. (diag[i] > 0)
[out] mode = 1 の場合に自動的に設定される.
[in]mode= 1: 変数のスケーリングを自動的に行う.
= 2: ユーザーがdiag[]に設定した値を使って変数のスケーリングを行う.
= その他: mode = 1とみなす.
[in]factor初期ステップの最大値を決める定数. ||diag×x||2×factorが0でない場合これを最大値とする. 0の場合factor自身の値を最大値とする. 通常, 0.1〜100の範囲で, 一般的には100とすればよい. (factor > 0)
[in]nprint> 0: 最初の反復, nprint回の反復ごと, 最終反復後に途中結果の出力のために irev = 50または51として戻る.
<= 0: 途中結果の出力のために戻らない.
[out]nfev関数評価回数 (irev = 1〜4で戻った回数).
[out]work[]配列 work[lwork]
作業領域.
[in]lwork配列 work[]のサイズ. (lwork >= n*(3*n + 11)/2)
[out]info= 0: 正常終了 (連続した反復間の相対誤差がxtol以下になった)
= -1: 入力パラメータ n の誤り (n < 1)
= -4: 入力パラメータ xtol の誤り (xtol < 0)
= -5: 入力パラメータ maxfev の誤り (maxfev <= 0)
= -6: 入力パラメータ ml の誤り (ml < 0)
= -7: 入力パラメータ mu の誤り (mu < 0)
= -9: 入力パラメータ diag の誤り (mode = 2のときにdiag[i] <= 0)
= -11: 入力パラメータ fator の誤り (factor <= 0)
= -15: 入力パラメータ lwork の誤り (lworkが小さすぎる)
= 1: 関数評価回数(irev = 1〜4)がmaxfevに達した
= 2: xtolが小さすぎる. 解xを改善することができなくなった
= 3: 直近5回のヤコビ行列の評価において解が改善されなかった
= 4: 直近10回の反復において解が改善されなかった
[out]xx[]配列 xx[lxx] (lxx >= n)
irev = 1〜4の場合, 関数値を求めるべき点を返す.
[in]yy[]配列 yy[lyy] (lyy >= n)
irev = 1〜4の場合, 再呼び出し時に関数値fi(xx[]) (i = 1〜n)を与えること.
[in,out]irevリバースコミュニケーションの制御変数.
[in] 最初の呼び出し時に 0 に設定しておくこと. 2回目以降の呼び出し時には値を変更してはならない.
[out] 0 以外の時には下記処理を行ってから再び本ルーチンを呼び出すこと.
= 0: 処理終了. 正常終了かどうかはinfoをチェックすること.
= 1〜4: xx[]における関数値を求め yy[]に設定すること. yy[]以外の変数を変更してはならない.
= 50, 51: 途中結果(x[], fvec[]など)を適宜出力する. どの変数も変更してはならない. (nprint > 0 の場合のみ)
出典
netlib/minpack