Dual numbers for automatic differentiation Example : (5 + 3 * epsilon) * (8 + epsilon) = 40 + 29 * epsilon +-----+ |40 0| |29 40| +-----+ Vector a = 3+epsilon 5+epsilon : +---+---+ |3 0|5 0| |1 3|1 5| +---+---+ Scalar product of a by itself = (3+epsilon)^2 + (5+epsilon)^2 = 34+16*epsilon : +-----+ |34 0| |16 34| +-----+ f(6+epsilon) = 59+15*epsilon +-----+ |59 0| |15 59| +-----+ Example : 5 + 3*epsilon + zeta +-----+ |5 0 0| |3 5 0| |1 0 5| +-----+ g(10+epsilon,20+zeta) = 330+23*epsilon+15*zeta +-----------+ |330 0 0| | 23 330 0| | 15 0 330| +-----------+ +-----------+ |330 0 0| | 23 330 0| | 15 0 330| +-----------+ m(2+epsilon,3+zeta) +-----------------------+ |5.85888 0 0| | 3 5.85888 0| |2.98999 0 5.85888| +-----------------------+ h(10+epsilon) = 1350 + 365*epsilon + 1/2 66 * epsilon^2 +--------------+ |1350 0 0| | 365 1350 0| | 33 365 1350| +--------------+ epsilon : +-----------+ |0 0 0 0 0 0| |1 0 0 0 0 0| |0 0 0 0 0 0| |0 1 0 0 0 0| |0 0 1 0 0 0| |0 0 0 0 0 0| +-----------+ zeta : +-----------+ |0 0 0 0 0 0| |0 0 0 0 0 0| |1 0 0 0 0 0| |0 0 0 0 0 0| |0 1 0 0 0 0| |0 0 1 0 0 0| +-----------+ epsilon^2 : +-----------+ |0 0 0 0 0 0| |0 0 0 0 0 0| |0 0 0 0 0 0| |1 0 0 0 0 0| |0 0 0 0 0 0| |0 0 0 0 0 0| +-----------+ zeta^2 : +-----------+ |0 0 0 0 0 0| |0 0 0 0 0 0| |0 0 0 0 0 0| |0 0 0 0 0 0| |0 0 0 0 0 0| |1 0 0 0 0 0| +-----------+ epsilon*zeta : +-----------+ |0 0 0 0 0 0| |0 0 0 0 0 0| |0 0 0 0 0 0| |0 0 0 0 0 0| |1 0 0 0 0 0| |0 0 0 0 0 0| +-----------+ k(10+epsilon,1+zeta) = 454 + 74*epsilon + 79*zeta + 3*epsilon^2 + 5*zeta^2 + 6*epsilon*zeta +-----------------------+ |454 0 0 0 0 0| | 74 454 0 0 0 0| | 79 0 454 0 0 0| | 3 74 0 454 0 0| | 6 79 74 0 454 0| | 5 0 79 0 0 454| +-----------------------+