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  }