github.com/cowsed/Parser@v0.0.0-20211216032244-48b10019d380/integrate.go (about) 1 package parser 2 3 //Integrate performs a trapezoidal sum with a defualt of 100 sections 4 func Integrate(e Expression, vars map[string]float64, wrt string, from, to float64) float64 { 5 return IntegrateV(e, vars, wrt, from, to, 100) 6 } 7 8 //IntegrateV performs a trapezoidal sum on the given expression 9 func IntegrateV(e Expression, vars map[string]float64, wrt string, from, to float64, NumBins int) float64 { 10 originalWRT := vars[wrt] 11 dx := (to - from) / float64(NumBins) 12 sum := 0.0 13 for i := 0; i < NumBins; i++ { 14 xi := float64(i)*dx + from 15 vars[wrt] = xi 16 yi := e.Evaluate(vars) 17 xf := float64(i+1)*dx + from 18 vars[wrt] = xf 19 yf := e.Evaluate(vars) 20 //trapezoidal sum 21 area := dx * ((yi + yf) / 2) 22 sum += area 23 } 24 vars[wrt] = originalWRT 25 return sum 26 }