|
◆ hybrj1_r()
void hybrj1_r |
( |
int |
n, |
|
|
double |
x[], |
|
|
double |
fvec[], |
|
|
double |
xtol, |
|
|
double |
work[], |
|
|
int |
lwork, |
|
|
int * |
info, |
|
|
double |
xx[], |
|
|
double |
yy[], |
|
|
int |
ldyypd, |
|
|
double |
yypd[], |
|
|
int * |
irev |
|
) |
| |
非線形連立方程式 (ハイブリッド法) (シンプルドライバ) (リバースコミュニケーション版)
- 目的
- hybrj1_rはn本のn変数非線形方程式よりなる連立方程式
fi(x1, x2, ..., xn) = 0 (i = 1 〜 n)
の解をパウエルのハイブリッド法により求める.
関数値およびヤコビ行列をirevに従ってユーザーが与える必要がある.
hybrj1_rは標準的な使用のためのシンプルドライバで, デフォルトパラメータを用いてhybrj_rを呼び出す.
- 引数
-
[in] | n | 未知数および方程式の数. (n > 0) |
[in,out] | x[] | 配列 x[lx] (lx >= n)
[in] 初期近似解.
[out] irev = 0: 求められた解ベクトル.
irev = 30: ヤコビ行列を求める点. |
[out] | fvec[] | 配列 fvec[lfvec] (lfvec >= n)
求められた解ベクトルx[]における関数値. |
[in] | xtol | 目標精度. 続く2回の反復間の相対誤差がxtolより小さくなったら終了する. (xtol >= 0) |
[out] | work[] | 配列 work[lwork]
作業領域. |
[in] | lwork | 配列 work[]のサイズ. (lwork >= n*(n + 13)/2) |
[out] | info | = 0: 正常終了 (連続した反復間の相対誤差がxtol以下になった)
= -1: 入力パラメータ n の誤り (n < 1)
= -4: 入力パラメータ xtol の誤り (xtol < 0)
= -6: 入力パラメータ lwork の誤り (lworkが小さすぎる)
= -10: 入力パラメータ ldyypd の誤り (ldyypd < n)
= 1: 関数評価回数(irev = 1, 2)が上限(100*(n + 1))に達した
= 2: xtolが小さすぎる。解xを改善することができなくなった
= 3: 直近5回のヤコビ行列の評価において解が改善されなかった
= 4: 直近10回の反復において解が改善されなかった |
[out] | xx[] | 配列 xx[lxx] (lxx >= n)
irev = 1または2の場合, 関数値を求めるべき点を返す. |
[in] | yy[] | 配列 yy[lyy] (lyy >= n)
irev = 1または2の場合, 再呼び出し時に関数値 fi(xx[]) (i=1〜n) を与えること. |
[in] | ldyypd | 配列yypd[][]の整合寸法. (ldyypd >= n) |
[in,out] | yypd[][] | 配列 yypd[lyypd][ldyypd] (lyypd >= n)
[in] irev = 30: 再呼び出し時にx[]におけるヤコビ行列(∂fi/∂xj)を与えること.
[out] irev = 0: 最終近似解におけるヤコビ行列をQR分解して得られる直行行列Q. |
[in,out] | irev | リバースコミュニケーションの制御変数.
[in] 最初の呼び出し時に 0 に設定しておくこと. 2回目以降の呼び出し時には値を変更してはならない.
[out] 0 以外の時には下記処理を行ってから再び本ルーチンを呼び出すこと.
= 0: 処理終了. 正常終了かどうかはinfoをチェックすること.
= 1, 2: xx[]における関数値を求め yy[]に設定すること. yy[]以外の変数を変更してはならない.
= 30: x[]におけるヤコビ行列を求め fjac[][]に設定すること. fjac[][]以外の変数を変更してはならない. |
- 出典
- netlib/minpack
|