Keywords - Function groups - @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

 Quantlet: nmcongrad Description: conjugate gradient method for finding the minimum of a given function

 Usage: min = nmcongrad(func,x0{,fder,linmin,ftol,maxiter}) Input: func string, name of a function whose minimum is to be found. The function should have just one parameter x, which is either vector n x 1, if the fder is given (see below), or matrix n x k (for any k >= 1) containing x = (x1,x2,...,xk), if the gradient is to be computed automatically; xi (n x 1 vector; i=1..k) represent points in which the function should be evaluated. As a result, the function should return a scalar or 1 x k vector, respectively. x0 n x 1 vector, the initial estimate of the minimum fder (optional) derivatives of func; there are several possible formats: 1. string, name of function computing gradient of func; its output is an n x 1 vector 2. empty string; in this case the gradient will be computed automatically using the quantlet nmgraddiff with a default step h 3. scalar h; the gradient will be computed automatically using the quantlet nmgraddiff with the given step h linmin optional string, name of the routine for 1D (line) minimization; default linmin = "nmlinminder" ftol optional scalar; convergence tolerance on the function value default ftol = 1e-7 maxiter optional scalar; maximal number of iterations; default maxiter = 250 Output: min.xmin minimum of func (isolated to a fractional precision of tol) min.fmin minimum function value f(xmin) min.iter number of performed iterations

Example:
```library("nummath")
;
; definition of function
;
proc(p)=ftion(x)
p = x[1,]^2 + 3*(x[2,]-1)^4
endp
;
;
; search for a minimum of f=x1^2 + 3*(x2-1)^4 with
; initial estimation x0=(1,2)

```
Result:
```Contents of _tmp.xmin
[1,]  5.1756e-12
[2,]        1
Contents of _tmp.fmin
[1,]  2.6789e-23
Contents of _tmp.iter
[1,]       10
```
Example:
```library("nummath")
;
; variables: simulated probit
;
randomize(1)
n    = 1000
x    = normal(n,2)
eps  = normal(n)
x1   = matrix(n)~x
beta = #(0.5,1,-2)
y    = x1 * beta + eps
yd   =(y >= 0)
;
; definition of probit likelihood function
; L = log prod(cdfn(x1*beta)^yd *(1-cdfn(x1*beta))^(1-yd))
;   = sum log(...)
; for numerical reasons, we will define it rather as follows:
;
proc(L)=ftion(beta)
yd = getglobal("yd")
x1 = getglobal("x1")
L1 = log((cdfn(x1*beta).*yd) +(1-yd))
L2 = log(((1-cdfn(x1*beta)).*(1-yd)) + yd)
L  = - sum(L1) - sum(L2)
; maximum of likelihood = minimum of L
endp
;
proc(dL)=fderiv(beta)
yd = getglobal("yd")
x1 = getglobal("x1")
dL1 = pdfn(x1*beta)./(cdfn(x1*beta)+(1-yd)).*x1.*yd
dL2 = -pdfn(x1*beta)./(1-cdfn(x1*beta)+yd).*x1.*(1-yd)
dL  = trans(- sum(dL1) - sum(dL2))
; defined this way for numerical reasons
endp
;
min
; notice that ML(beta=min.xmin) = -min.fmin

```
Result:
```Contents of min.xmin
[1,]   0.5358
[2,]  0.93021
[3,]  -2.0262
Contents of min.fmin
[1,]    288.3
Contents of min.iter
[1,]        5
```

Author: L. Cizkova, 20010807 license MD*Tech
(C) MD*TECH Method and Data Technologies, 05.02.2006