Skip to content

tamnd/dual

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Dual

The dual package defines the Dual type to represent dual numbers. For simple explaination, see the blog post by Simon.

In linear algebra, the dual numbers extend the real numbers by adjoining one new element ε with the property ε^2 = 0 (ε is nilpotent), in a similar way that complex numbers adjoin the imaginary unit i with the property i*i=-1.

Install

go get github.com/tamnd/dual

Usage

Use the dual.New() to define the dual number 2 + 1*ɛ:

x := dual.New(2, 1)

Define a function f(x) = x^2/(x+1) as:

func f(x dual.Dual) dual.Dual {
   return dual.Div(dual.Mul(x, x), dual.Add(x, dual.FromFloat(1.0))
}

If we want to find the first derivative of f(x) at x=2, i.e, f'(2), we could find it by using dual number arithmetic:

y := f(x)
fmt.Println("f(x) = x^2/(x+1)")
fmt.Println("f(2) = ", dual.Real(y))
fmt.Println("f'(2) = ", dual.Epsilon(y))

The complete example:

package main

import "github.com/tamnd/dual"

func f(x dual.Dual) dual.Dual {
   return dual.Div(dual.Mul(x, x), dual.Add(x, dual.FromFloat(1.0))
}

func main() {
    x := dual.New(2, 1)
    y := f(x)
    fmt.Println("f(x) = x^2/(x+1)")
    fmt.Println("f(2) = ", dual.Real(y))
    fmt.Println("f'(2) = ", dual.Epsilon(y))
}

About

Go implementation of dual numbers.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages