Post Reply 
Automatic differentiation using dual numbers
06-25-2022, 11:05 AM
Post: #21
RE: Automatic differentiation using dual numbers
(06-22-2022 10:36 PM)Thomas Klemm Wrote:  Halley's Method

It's straightforward to implement Halley's method:

\(
\begin{align}
x_{{n+1}}=x_{n}-{\frac{2f(x_{n})f'(x_{n})}{2{[f'(x_{n})]}^{2}-f(x_{n})f''(x_{n})}}
\end{align}
\)

However we rather use this formula:

\(
\begin{align}
x_{n+1}
&=x_{n}-{\frac {f(x_{n})}{f'(x_{n})-{\frac {f(x_{n})}{f'(x_{n})}}{\frac {f''(x_{n})}{2}}}} \\
&=x_{n}-{\frac {f(x_{n})}{f'(x_{n})}}\left[1-{\frac {f(x_{n})}{f'(x_{n})}}\cdot {\frac {f''(x_{n})}{2f'(x_{n})}}\right]^{-1} \\
\end{align}
\)

Is correction factor to Newton's always positive ?
How do we ensure Halley's method is safe to use ?

I've seen some page (search for householder) flip the correction: 1/(1-ε) ≈ 1+ε
Correction is less aggressive, but safer (if f'≠0, no division by zero problem)

\( \displaystyle
x_{n+1}
=x_{n}-{\frac {f(x_{n})}{f'(x_{n})}}\left[1+{\frac {f(x_{n})}{f'(x_{n})}}\cdot {\frac {f''(x_{n})}{2f'(x_{n})}}\right]
\)
Find all posts by this user
Quote this message in a reply
06-26-2022, 10:55 AM (This post was last modified: 06-27-2022 09:13 AM by Albert Chan.)
Post: #22
RE: Automatic differentiation using dual numbers
An example that c = (1 - 1/2 * (f/f') * (f''/f')) can turn negative.

f = x^4 - 30*x^3 +63*x^2 - 12*x + 33      // real roots ≈ [2.31090, 27.7432]
f' = 4*x^3 - 90*x^2 + 126*x - 12              // real roots ≈ [0.102744, 1.38994, 21.0073]
f'' = 12*x^2 -180*x + 126                         // real roots ≈ [0.736125, 14.2639]

m = f'^2 - 1/2*f*f''                                    // real roots ≈ [-0.34128, 0.484147]
c = m / f'^2

c = ±∞ when guess = f' roots (Newton's correction also ±∞)
c = 0 when guess = m roots (Halley's method hit by divide-by-zero)
c < 0 when guess within m roots (iterate opposite direction of Newton's)

Comment:

Above example is easier to solve for roots of f(1/x), then flip the results.

g = 33*x^4 - 12*x^3 + 63*x^2 - 30*x + 1
g' = 132*x^3 - 36*x^2 + 126*x - 30
g'' = 396*x^2 - 72*x + 126

g'', with negative quadratic discriminant, have no root
g'' > 0 ⇒ g is concave up.

[Image: concave_up_and_down6161585887807256570.png]
Find all posts by this user
Quote this message in a reply
07-03-2022, 02:12 PM
Post: #23
RE: Automatic differentiation using dual numbers
If guess is close to root, we can consider f as the independent variable.

x = x0 + (dx/df)(f=f0) * (f-f0)/1! + (d²x/df²)(f=f0) * (f-f0)²/2! + ...

dx/df = 1 / (df/dx) = 1/f'
d²x/df² = d/df (dx/df) = d/dx (1/f') * dx/df = (-f''/f'^2) / f' = -f''/f'^3

Solving root is simplify x at f=0, with iteration formula:

x ← x + (1/f')*(-f) + (-f''/f'^3)*(f^2/2) + ... = x - f/f' - (f^2*f'')/(2*f'^3) + ...

Drop ... = O(f^3), we have:

(06-25-2022 11:05 AM)Albert Chan Wrote:  I've seen some page (search for householder) flip the correction: 1/(1-ε) ≈ 1+ε
Correction is less aggressive, but safer (if f'≠0, no division by zero problem)

\( \displaystyle
x_{n+1}
=x_{n}-{\frac {f(x_{n})}{f'(x_{n})}}\left[1+{\frac {f(x_{n})}{f'(x_{n})}}\cdot {\frac {f''(x_{n})}{2f'(x_{n})}}\right]
\)
Find all posts by this user
Quote this message in a reply
07-07-2022, 07:35 AM (This post was last modified: 07-07-2022 07:36 AM by Ángel Martin.)
Post: #24
RE: Automatic differentiation using dual numbers
(06-26-2022 10:55 AM)Albert Chan Wrote:  [Image: concave_up_and_down6161585887807256570.png]

"Concave and Convex" works better for me.
Find all posts by this user
Quote this message in a reply
07-07-2022, 07:40 AM (This post was last modified: 07-07-2022 07:43 AM by Ángel Martin.)
Post: #25
RE: Automatic differentiation using dual numbers
(06-21-2022 02:19 AM)Thomas Klemm Wrote:  
(06-20-2022 09:50 PM)Albert Chan Wrote:  … forget about ε … ε is a bad idea

Au contraire!
It's just that you misinterpreted the meaning of the coefficient of \(\varepsilon^2\).
Based on the Taylor series we have:

\(
\begin{align}
f(x + \varepsilon) = f(x) + {f}'(x) \cdot \varepsilon + \frac{1}{2} {f}''(x) \cdot \varepsilon^2
\end{align}
\)

Given your example:
Quote:{f, f', f''} = {1,2,3}
{g,g',g''} = {3,1,4}

… we have to calculate:

\(
\begin{align}
\left(1 + 2 \varepsilon + \frac{3}{2} \varepsilon^2 \right)\left(3 + \varepsilon + 2 \varepsilon^2 \right)
&= 3 + 7 \varepsilon + \frac{17}{2} \varepsilon^2 + \frac{11}{2} \varepsilon^3 + 3 \varepsilon^4 \\
&= 3 + 7 \varepsilon + \frac{17}{2} \varepsilon^2 \\
\end{align}
\)

… since \(\varepsilon^3 = 0\).
With this interpretation we get the correct result.

This can be extended in an analogous way for higher-order derivatives.

Sorry for coming this late to this, but I'm not sure I follow your point about higher order derivatives (I'm sure it's my own fault). By definition \(\varepsilon^2 = 0\)., right?
Find all posts by this user
Quote this message in a reply
07-07-2022, 08:02 AM
Post: #26
RE: Automatic differentiation using dual numbers
(07-07-2022 07:40 AM)Ángel Martin Wrote:  By definition \(\varepsilon^2 = 0\)., right?

If we want to extend the idea of dual numbers for higher order derivatives we can define \(\varepsilon^n = 0\).
Slightly sloppy, we ignore the terms of \(\varepsilon^n\) and higher.
Find all posts by this user
Quote this message in a reply
07-07-2022, 10:42 AM (This post was last modified: 07-07-2022 10:43 AM by ijabbott.)
Post: #27
RE: Automatic differentiation using dual numbers
(07-07-2022 07:35 AM)Ángel Martin Wrote:  
(06-26-2022 10:55 AM)Albert Chan Wrote:  [ "Concave up / Concave down" illustration was here ]

"Concave and Convex" works better for me.

Then you need to remember the viewpoint.

— Ian Abbott
Find all posts by this user
Quote this message in a reply
Post Reply 




User(s) browsing this thread: 1 Guest(s)