Skip to content

Dual Numbers

ExodusCoder9 edited this page Jun 20, 2026 · 1 revision

Dual Numbers

DualNumberd and DualNumberf are immutable Java records for automatic differentiation in one variable. A dual number encodes a value and its derivative simultaneously.

Construction

DualNumberd x = new DualNumberd(3.0, 1.0);  // value=3, derivative=1
DualNumberd c = new DualNumberd(5.0, 0.0);  // constant: value=5, derivative=0
Fields
double val = dn.real();   // the value
double der = dn.dual();   // the derivative
Arithmetic
DualNumberd sum = a.add(b);
DualNumberd diff = a.sub(b);
DualNumberd prod = a.mul(b);   // uses Math.fma
DualNumberd quot = a.div(b);
DualNumberd neg = a.negate();
DualNumberd conj = a.conjugate();
Elementary Functions (with auto-diff)
DualNumberd result = x.sin();
DualNumberd result = x.cos();
DualNumberd result = x.exp();
DualNumberd result = x.log();
DualNumberd result = x.pow(n);    // integer power
DualNumberd result = x.sqrt();
Example: Derivative of f(x) = x² + sin(x)
DualNumberd x = new DualNumberd(2.0, 1.0);   // evaluate at x=2
DualNumberd result = x.mul(x).add(x.sin());
double value = result.real();   // f(2) = 4 + sin(2)
double deriv = result.dual();   // f'(2) = 2*2 + cos(2)

Clone this wiki locally