Man page - hybrj1_(3)
Packages contains this manual
Manual
HYBRJ_
NAMESYNOPSIS
DESCRIPTION
Language notes
Parameters for both functions
Parameters for hybrj1_
Parameters for hybrj_
SEE ALSO
AUTHORS
NAME
hybrj_, hybrj1_ - find a zero of a system of nonlinear function
SYNOPSIS
#include <minpack.h>
|
void hybrj1_ (void (* fcn )(int * n , double * x , double * fvec , double * fjac , int * ldfjac , int * iflag ), |
int *
n
, double
*
x
, double *
fvec
, double
*
fjac
,
int *
ldfjac
,
double *
tol
, int *
info
, double
*
wa
, int *
lwa
);
|
void hybrj_ (void (* fcn )(int * n , double * x , double * fvec , double * fjac , int * ldfjac , int * iflag ), |
int *
n
, double
*
x
, double *
fvec
, double
*
fjac
,
int *
ldfjac
,
double *
xtol
, int *
maxfev
,
double *
diag
, int *
mode
, double
*
factor
, int *
nprint
, int
*
info
, int *
nfev
,
int *
njev
, double *
r
, int
*
lr
, double *
qtf
,
double *
wa1
, double *
wa2
, double
*
wa3
, double *
wa4
);
DESCRIPTION
The purpose of hybrj_ is to find a zero of a system of n nonlinear functions in n variables by a modification of the Powell hybrid method. The user must provide a subroutine which calculates the functions and a subroutine which calculates the Jacobian.
hybrj1_ serves the same function but has a simplified calling sequence.
Language notes
hybrj_
and
hybrj1_
are written in FORTRAN. If calling from
C, keep these points in mind:
Name mangling.
With gfortran , all the function names end in an underscore.
Compile with gfortran .
Even if your program is all C code, you should link with gfortran so it will pull in the FORTRAN libraries automatically. Itβs easiest just to use gfortran to do all the compiling. (It handles C just fine.)
Call by reference.
All function parameters must be pointers.
Column-major arrays.
Suppose a function returns an array with 5 rows and 3 columns in an array z and in the call you have declared a leading dimension of 7. The FORTRAN and equivalent C references are:
|
z(1,1) |
|||||
|
z[0] |
|||||
|
z(2,1) |
|||||
|
z[1] |
|||||
|
z(5,1) |
|||||
|
z[4] |
|||||
|
z(1,2) |
|||||
|
z[7] |
|||||
|
z(1,3) |
|||||
|
z[14] |
|||||
|
z(i,j) |
|||||
|
z[(i-1) + (j-1)*7] |
Parameters for both functions
fcn is the name of the user-supplied subroutine which calculates the functions. In FORTRAN, fcn must be declared in an external statement in the user calling program, and should be written as follows:
subroutine
fcn(n,x,fvec,fjac,ldfjac,iflag)
integer n,ldfjac,iflag
double precision x(n),fvec(n),fjac(ldfjac,n)
----------
if iflag = 1 calculate the functions at x and
return this vector in fvec. do not alter fjac.
if iflag = 2 calculate the jacobian at x and
return this matrix in fjac. do not alter fvec.
---------
return
end
In C, fcn should be written as follows:
void fcn(int *n,
double *x, double *fvec, double *fjac,
int *ldfjac, int *iflag)
{
/* if iflag = 1 calculate the functions at x and
return this vector in fvec. do not alter fjac.
if iflag = 2 calculate the jacobian at x and
return this matrix in fjac. do not alter fvec. */
}
The value of iflag should not be changed by fcn unless the user wants to terminate execution of hybrj_. In this case set iflag to a negative integer.
n is a positive integer input variable set to the number of functions and variables.
x is an array of length n . On input x must contain an initial estimate of the solution vector. On output x contains the final estimate of the solution vector.
fjac is an output n by n array which contains the orthogonal matrix q produced by the qr factorization of the final approximate jacobian.
ldfjac is a positive integer input variable not less than n which specifies the leading dimension of the array fjac .
fvec is an output array of length n which contains the functions evaluated at the output x .
Parameters for hybrj1_
tol is a nonnegative input variable. Termination occurs when the algorithm estimates that the relative error between x and the solution is at most tol .
info is an integer output variable. If the user has terminated execution, info is set to the (negative) value of iflag . See description of fcn . Otherwise, info is set as follows.
info = 0 improper input parameters.
info
= 1
algorithm estimates that the relative error
between
x
and the solution is at most
tol
.
info
= 2
number of calls to fcn has reached or exceeded
200*(
n
+1).
info
= 3
tol
is too small. No further improvement in
the approximate solution
x
is possible.
info = 4 iteration is not making good progress.
wa is a work array of length lwa .
lwa is a positive integer input variable not less than ( n *(3* n +13))/2.
Parameters for hybrj_
xtol is a nonnegative input variable. Termination occurs when the relative error between two consecutive iterates is at most xtol .
maxfev is a positive integer input variable. Termination occurs when the number of calls to fcn is at least maxfev by the end of an iteration.
diag is an array of length n . If mode = 1 (see below), diag is internally set. If mode = 2, diag must contain positive entries that serve as multiplicative scale factors for the variables.
mode is an integer input variable. If mode = 1, the variables will be scaled internally. If mode = 2, the scaling is specified by the input diag . Other values of mode are equivalent to mode = 1.
factor is a positive input variable used in determining the initial step bound. This bound is set to the product of factor and the euclidean norm of diag*x if nonzero, or else to factor itself. In most cases factor should lie in the interval (.1,100.). 100. Is a generally recommended value.
nprint is an integer input variable that enables controlled printing of iterates if it is positive. In this case, fcn is called with iflag = 0 at the beginning of the first iteration and every nprint iterations thereafter and immediately prior to return, with x and fvec available for printing. If nprint is not positive, no special calls of fcn with iflag = 0 are made.
info is an integer output variable. If the user has terminated execution, info is set to the (negative) value of iflag . See description of fcn . Otherwise, info is set as follows.
info = 0 improper input parameters.
info
= 1
relative error between two consecutive iterates
is at most
xtol
.
info
= 2
number of calls to
fcn
has reached or exceeded
maxfev
.
info
= 3
xtol
is too small. No further improvement in
the approximate solution
x
is possible.
info
= 4
iteration is not making good progress, as
measured by the improvement from the last
five jacobian evaluations.
info
= 5
iteration is not making good progress, as
measured by the improvement from the last
ten iterations.
nfev is an integer output variable set to the number of calls to fcn .
fjac is an output n by n array which contains the orthogonal matrix q produced by the qr factorization of the final approximate jacobian.
ldfjac is a positive integer input variable not less than n which specifies the leading dimension of the array fjac .
r is an output array of length lr which contains the upper triangular matrix produced by the qr factorization of the final approximate Jacobian, stored rowwise.
lr is a positive integer input variable not less than ( n *( n +1))/2.
qtf is an output array of length n which contains the vector (q transpose)* fvec .
wa1 , wa2 , wa3 , and wa4 are work arrays of length n .
SEE ALSO
hybrd (3), hybrd1 (3).
AUTHORS
Burton S.
Garbow, Kenneth E. Hillstrom, Jorge J. More.
This manual page was written by Jim Van Zandt
<jrv@debian.org>, for the Debian GNU/Linux system (but
may be used by others).