Learn R Programming

lmfor (version 1.6)

NR: Solve a Nonlinear Equation Using Newton-Raphson algorithm.

Description

Solves an equation equation of form \(f(x)=0\), for scalar \(x\) using the Newton-Raphson algorithm.

Usage

NR(init, fn, gr, crit = 6, range = c(-Inf, Inf))

Arguments

init

Numeric scalar, The initial guess for \(x\).

fn

An R-function returning the scalar value of \(f(x)\), with \(x\) as the only argument.

gr

An R-function returning the first derivative of \(f(x)\), with \(x\) as the only argument.

crit

Convergence criteria. The upper limit for the absolute value of \(f(x)\) at an accepted the solution.

range

A two-unit vector giving the upper and lower bounds for \(x\). The solution is searched from within this range.

Value

A list of components

par

the value of \(x\) in the solution

crit

the value of \(f(x)\) at the solution

If estimation fails (no solution is found during 100000 iterations), both e lements of the solution are NA's.

Details

The function is a straightforward implementation of the well-known Newton-Raphson algorithm.

See Also

See NRnum for a vector-valued x without analytical gradients.

Examples

Run this code
# NOT RUN {
## Numerically solve Weibull shape for a stand
## where DGM=15cm, G=15m^2/ha and N=1000 trees per ha
func<-function(shape,G,N,DGM) {
##      print(G,DGM,N)
      val<-pi/(4*gamma(1-2/shape)*log(2)^(2/shape))-G/(N*DGM^2)
      val
      }

grad<-function(shape) {
      pi/4*(-1)*                                                            
      (gamma(1-2/shape)*log(2)^(2/shape))^(-2)*                             
      (gamma(1-2/shape)*digamma(1-2/shape)*2*shape^(-2)*log(2)^(2/shape)+   
      log(2)^(2/shape)*log(log(2))*(-2)*shape^(-2)*gamma(1-2/shape))         
      }
      
shape<-NR(5,fn=function(x) func(x,G=10000*15,1000,15),gr=grad,crit=10,range=c(2.1,Inf))$par
# }

Run the code above in your browser using DataLab