|
|
◆ 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 |
|
) |
| |
Solution of a system of nonlinear equations by Powell hybrid method (simple driver) (reverse communication version)
- Purpose
- hybrj1_r finds a zero of a system of n nonlinear functions in n variables
fi(x1, x2, ..., xn) = 0 (i = 1 to n)
by a modification of the Powell hybrid method.
The user must provide the calculated function values and the Jacobian according to irev.
hybrj1_r is the simple driver for standard use, which calls the hybrj_r with default parameters.
- Parameters
-
| [in] | n | Number of functions and variables. (n > 0) |
| [in,out] | x[] | Array x[lx] (lx >= n)
[in] An initial estimate of the solution vector.
[out] irev = 0: The obtained solution vector.
irev = 30: The abscissa where the Jacobian shoule be evaluated. |
| [out] | fvec[] | Array fvec[lfvec] (lfvec >= n)
The function values evaluated at the solution vector x[]. |
| [in] | xtol | Target relative tolerance. Termination occurs when the relative error between two consecutive iterations is at most xtol. (xtol >= 0) |
| [out] | work[] | Array work[lwork]
Work array. |
| [in] | lwork | The length of work[]. (lwork >= n*(n + 13)/2) |
| [out] | info | = 0: Successful exit (relative error between two consecutive iterates is at most xtol)
= -1: The argument n had an illegal value (n < 1)
= -4: The argument xtol had an illegal value (xtol < 0)
= -6: The argument lwork had an illegal value (lwork too small)
= -10: The argument ldyypd had an illegal value (ldyypd < n)
= 1: Number of function evaluations with irev = 1 or 2 has reached the limit (100*(n + 1))
= 2: xtol is too small. No further improvement in the approximate solution x is possible
= 3: Iteration is not making good progress, as measured by the improvement from the last five Jacobian evaluations
= 4: Iteration is not making good progress, as measured by the improvement from the last ten iterations |
| [out] | xx[] | Array xx[lxx] (lxx >= n)
When returned with irev = 1 or 2, xx[] contains the abscissa where the function value should be evaluated and given in the next call. |
| [in] | yy[] | Array yy[lyy] (lyy >= n)
When returned with irev = 1 or 2, the function value fi(xx[]) (i=1 to n) should be given in yy[] in the next call. |
| [in] | ldyypd | The leading dimension of the array yypd[][]. (ldyypd >= n) |
| [in,out] | yypd[][] | Array yypd[lyypd][ldyypd] (lyypd >= n)
[in] irev = 30: Jacobian(dfi/dxj) at x[] should be given in yypd[][] in the next call.
[out] irev = 0: The orthogonal matrix Q produced by the QR factorization of the final approximate Jacobian |
| [in,out] | irev | Control variable for reverse communication.
[in] Before first call, irev should be initialized to zero. On succeeding calls, irev should not be altered.
[out] If irev is not zero, complete the following process and call this routine again.
= 0: Computation finished. See return code in info.
= 1 or 2: User should set the function values at xx[] in yy[]. Do not alter any variables other than yy[].
= 30: User should set the Jacobian at x[] in fjac[][]. Do not alter any variables other than fjac[][]. |
- Reference
- netlib/minpack
|