123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- package utils
- // Series is a container for a series of data
- type Series []Coordinate
- // Coordinate holds the data in a series
- type Coordinate struct {
- X, Y float64
- }
- // GetLinearResult 生成线性方程式
- func GetLinearResult(s []Coordinate) (gradient, intercept float64) {
- if len(s) <= 1 {
- return
- }
- // Placeholder for the math to be done
- var sum [5]float64
- // Loop over data keeping index in place
- i := 0
- for ; i < len(s); i++ {
- sum[0] += s[i].X
- sum[1] += s[i].Y
- sum[2] += s[i].X * s[i].X
- sum[3] += s[i].X * s[i].Y
- sum[4] += s[i].Y * s[i].Y
- }
- // Find gradient and intercept
- f := float64(i)
- gradient = (f*sum[3] - sum[0]*sum[1]) / (f*sum[2] - sum[0]*sum[0])
- intercept = (sum[1] / f) - (gradient * sum[0] / f)
- //fmt.Println("gradient:", gradient, ";intercept:", intercept)
- // Create the new regression series
- //for j := 0; j < len(s); j++ {
- // regressions = append(regressions, Coordinate{
- // X: s[j].X,
- // Y: s[j].X*gradient + intercept,
- // })
- //}
- return
- }
|