# NewtonsMethod.frink

``` 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]]] ```