c05nc Method
関数リスト一覧   NagLibrary Namespaceへ  ライブラリイントロダクション  本ヘルプドキュメントのchm形式版

c05nc is a comprehensive method to find a solution of a system of nonlinear equations by a modification of the Powell hybrid method.

Syntax

C#
public static void c05nc(
	C05..::.C05NC_FCN fcn,
	int n,
	double[] x,
	double[] fvec,
	double xtol,
	int maxfev,
	int ml,
	int mu,
	double epsfcn,
	int mode,
	double[] diag,
	double factor,
	int nprint,
	out int nfev,
	double[,] fjac,
	double[] r,
	double[] qtf,
	out int ifail
)
Visual Basic (Declaration)
Public Shared Sub c05nc ( _
	fcn As C05..::.C05NC_FCN, _
	n As Integer, _
	x As Double(), _
	fvec As Double(), _
	xtol As Double, _
	maxfev As Integer, _
	ml As Integer, _
	mu As Integer, _
	epsfcn As Double, _
	mode As Integer, _
	diag As Double(), _
	factor As Double, _
	nprint As Integer, _
	<OutAttribute> ByRef nfev As Integer, _
	fjac As Double(,), _
	r As Double(), _
	qtf As Double(), _
	<OutAttribute> ByRef ifail As Integer _
)
Visual C++
public:
static void c05nc(
	C05..::.C05NC_FCN^ fcn, 
	int n, 
	array<double>^ x, 
	array<double>^ fvec, 
	double xtol, 
	int maxfev, 
	int ml, 
	int mu, 
	double epsfcn, 
	int mode, 
	array<double>^ diag, 
	double factor, 
	int nprint, 
	[OutAttribute] int% nfev, 
	array<double,2>^ fjac, 
	array<double>^ r, 
	array<double>^ qtf, 
	[OutAttribute] int% ifail
)
F#
static member c05nc : 
        fcn:C05..::.C05NC_FCN * 
        n:int * 
        x:float[] * 
        fvec:float[] * 
        xtol:float * 
        maxfev:int * 
        ml:int * 
        mu:int * 
        epsfcn:float * 
        mode:int * 
        diag:float[] * 
        factor:float * 
        nprint:int * 
        nfev:int byref * 
        fjac:float[,] * 
        r:float[] * 
        qtf:float[] * 
        ifail:int byref -> unit 

Parameters

fcn
Type: NagLibrary..::.C05..::.C05NC_FCN
fcn must return the values of the functions fi  at a point x.

A delegate of type C05NC_FCN.

n
Type: System..::.Int32
On entry: n, the number of equations.
Constraint: n>0 .
x
Type: array< System..::.Double >[]()[]
An array of size [n]
On entry: an initial guess at the solution vector.
On exit: the final estimate of the solution vector.
fvec
Type: array< System..::.Double >[]()[]
An array of size [n]
On exit: the function values at the final point, x.
xtol
Type: System..::.Double
On entry: the accuracy in x to which the solution is required.
Suggested value: the square root of the machine precision.
Constraint: xtol0.0 .
maxfev
Type: System..::.Int32
On entry: the maximum number of calls to fcn with iflag0 . c05nc will exit with ifail=2, if, at the end of an iteration, the number of calls to fcn exceeds maxfev.
Suggested value: maxfev=200×n+1 .
Constraint: maxfev>0 .
ml
Type: System..::.Int32
On entry: the number of subdiagonals within the band of the Jacobian matrix. (If the Jacobian is not banded, or you are unsure, set ml=n-1 .)
Constraint: ml0 .
mu
Type: System..::.Int32
On entry: the number of superdiagonals within the band of the Jacobian matrix. (If the Jacobian is not banded, or you are unsure, set mu=n-1 .)
Constraint: mu0 .
epsfcn
Type: System..::.Double
On entry: a rough estimate of the largest relative error in the functions. It is used in determining a suitable step for a forward difference approximation to the Jacobian. If epsfcn is less than machine precision then machine precision is used. Consequently a value of 0.0 will often be suitable.
Suggested value: epsfcn=0.0 .
mode
Type: System..::.Int32
On entry: indicates whether or not you have provided scaling factors in diag. If mode=2 the scaling must have been specified in diag. Otherwise, the variables will be scaled internally.
diag
Type: array< System..::.Double >[]()[]
An array of size [n]
On entry: if mode=2, diag must contain multiplicative scale factors for the variables.
Constraint: diag[i]>0.0 , for i=0,1,,n-1.
On exit: the scale factors actually used (computed internally if mode2).
factor
Type: System..::.Double
On entry: a quantity to be used in determining the initial step bound. In most cases, factor should lie between 0.1 and 100.0. (The step bound is factor×diag×x2  if this is nonzero; otherwise the bound is factor.)
Suggested value: factor=100.0 .
Constraint: factor>0.0 .
nprint
Type: System..::.Int32
On entry: indicates whether special calls to fcn, with iflag set to 0, are to be made for printing purposes.
nprint0
No calls are made.
nprint>0
fcn is called at the beginning of the first iteration, every nprint iterations thereafter and immediately before the return from c05nc.
nfev
Type: System..::.Int32 %
On exit: the number of calls made to fcn.
fjac
Type: array< System..::.Double ,2>[,](,)[,]
An array of size [ldfjac, n]
Note: ldfjac must satisfy the constraint: ldfjacn
On exit: the orthogonal matrix Q produced by the QR  factorization of the final approximate Jacobian.
r
Type: array< System..::.Double >[]()[]
An array of size [n×n+1/2]
On exit: the upper triangular matrix R produced by the QR  factorization of the final approximate Jacobian, stored row-wise.
qtf
Type: array< System..::.Double >[]()[]
An array of size [n]
On exit: the vector QTf .
ifail
Type: System..::.Int32 %
On exit: ifail=0 unless the method detects an error (see [Error Indicators and Warnings]).

Description

The system of equations is defined as:
fi x1,x2,,xn = 0 ,   for ​ i= 1, 2, , n .
c05nc is based on the MINPACK routine HYBRD (see Moré et al. (1980)). It chooses the correction at each step as a convex combination of the Newton and scaled gradient directions. Under reasonable conditions this guarantees global convergence for starting points far from the solution and a fast rate of convergence. The Jacobian is updated by the rank-1 method of Broyden. At the starting point the Jacobian is approximated by forward differences, but these are not used again until the rank-1 method fails to produce satisfactory progress. For more details see Powell (1970).

References

Error Indicators and Warnings

Accuracy

If x^  is the true solution and D denotes the diagonal matrix whose entries are defined by the array diag, then c05nc tries to ensure that
D x-x^ 2 xtol × D x^ 2 .
If this condition is satisfied with xtol = 10-k , then the larger components of Dx  have k significant decimal digits. There is a danger that the smaller components of Dx  may have large relative errors, but the fast rate of convergence of c05nc usually avoids this possibility.
If xtol is less than machine precision and the above test is satisfied with the machine precision in place of xtol, then the method exits with ifail=3.
Note:  this convergence test is based purely on relative error, and may not indicate convergence if the solution is very close to the origin.
The test assumes that the functions are reasonably well behaved. If this condition is not satisfied, then c05nc may incorrectly indicate convergence. The validity of the answer can be checked, for example, by rerunning c05nc with a tighter tolerance.

Further Comments

Local workspace arrays of fixed lengths are allocated internally by c05nc. The total size of these arrays amounts to 4×n real elements.
The time required by c05nc to solve a given problem depends on n, the behaviour of the functions, the accuracy requested and the starting point. The number of arithmetic operations executed by c05nc to process each call of fcn is about 11.5×n2 . Unless fcn can be evaluated quickly, the timing of c05nc will be strongly influenced by the time spent in fcn.
Ideally the problem should be scaled so that, at the solution, the function values are of comparable magnitude.
The number of function evaluations required to evaluate the Jacobian may be reduced if you can specify ml and mu.

Example

See Also