NewtonsMethod.frink

Download or view NewtonsMethod.frink in plain text format


use functionUtils.frink
use allTransforms.frink

/** This program tries to help you find a Newton's method iteration for a
   particular expression. */

NewtonsMethod[f] :=
{
   body = functionBody[f]
   df = transformExpression[makeDerivative[f]]
   vars = functionArgumentsAsSymbols[f]
//  println["f  = " + inputForm[body]]
//  println["df = " + inputForm[df]]
   return transformExpression[vars@0 - body/df]
}

/** This program tries to help you find a Halley's method iteration for a
   particular function . */

HalleysMethod[f] :=
{
   body = functionBody[f]
   df =  transformExpression[makeDerivative[f]]
   df2 = transformExpression[makeDerivative[f, 2]]
   vars = functionArgumentsAsSymbols[f]
//   println["f   = " + inputForm[body]]
   println["df  = " + inputForm[df]]
   println["df2 = " + inputForm[df2]]
   return transformExpression[vars@0 - 2 body df / (2 df^2 - df df2)]
}

symbolicMode[true]


/** Newton's method solves for the roots or zeroes of a function f, that is,
    where 
    f[x]=0

    The below creates a two-argument anonymous function that implicitly
    encodes the condition
    x^2 - n = 0

    or, alternately,
    x^2 = n

    or, alternately,
    x = sqrt[n]

    which is what we really want to be solving in this case.

    We want to find a way to transform the equation we want to be solving, e.g.
    x = sqrt[n]

    into the form that Newton's method implicitly expects.  Which appears to
    be solving for n, (e.g. n = x^2) and then transforming that into
    (x^2 - n) === 0 or (n - x^2) === 0
   */

f = {|x, n| x^2 - n}

println["The next term (Newton's Method) is given by iterating: "]
println[inputForm[NewtonsMethod[f]]]

println[]
println["The next term (Halley's method) is given by iterating: "]
println[inputForm[HalleysMethod[f]]]


Download or view NewtonsMethod.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 20136 days, 4 hours, 32 minutes ago.