invr{                          ⍝ Approx inverse of real-valued function.
    0::'no inverse'⎕SIGNAL ⎕EN  ⍝ pass back domain error.
    ⍺←1+⎕CT+0×⍵                 ⍝ initial guess - slightly more than 1.
    ∆x←⎕CT*÷2                   ⍝ increment delta-x.
    -∘⍵∘⍺⍺{                     ⍝ Newton-Raphson: find root of ⍺⍺(x)-⍵ = 0.
        ⍵⍵ ⍵:⍵                  ⍝ all items within ⎕ct of inverse: finished.
        y y∆←⍺⍺¨0 ∆x+⊂⍵         ⍝ f(x) f(x+∆x)
        ∇ ⍵-y×∆x÷y∆-y           ⍝ refined estimate.
    }(⍵∘≡∘⍺⍺)⍺                  ⍝ starting from best guess.
}
code_colours

test script

Back to: notes

Back to: Workspaces