-
Notifications
You must be signed in to change notification settings - Fork 0
Dual Numbers
ExodusCoder9 edited this page Jun 20, 2026
·
1 revision
DualNumberd and DualNumberf are immutable Java records for automatic differentiation in one variable. A dual number encodes a value and its derivative simultaneously.
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)