calculate.go 1003 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package utils
  2. // Series is a container for a series of data
  3. type Series []Coordinate
  4. // Coordinate holds the data in a series
  5. type Coordinate struct {
  6. X, Y float64
  7. }
  8. // GetLinearResult 生成线性方程式
  9. func GetLinearResult(s []Coordinate) (gradient, intercept float64) {
  10. if len(s) <= 1 {
  11. return
  12. }
  13. // Placeholder for the math to be done
  14. var sum [5]float64
  15. // Loop over data keeping index in place
  16. i := 0
  17. for ; i < len(s); i++ {
  18. sum[0] += s[i].X
  19. sum[1] += s[i].Y
  20. sum[2] += s[i].X * s[i].X
  21. sum[3] += s[i].X * s[i].Y
  22. sum[4] += s[i].Y * s[i].Y
  23. }
  24. // Find gradient and intercept
  25. f := float64(i)
  26. gradient = (f*sum[3] - sum[0]*sum[1]) / (f*sum[2] - sum[0]*sum[0])
  27. intercept = (sum[1] / f) - (gradient * sum[0] / f)
  28. //fmt.Println("gradient:", gradient, ";intercept:", intercept)
  29. // Create the new regression series
  30. //for j := 0; j < len(s); j++ {
  31. // regressions = append(regressions, Coordinate{
  32. // X: s[j].X,
  33. // Y: s[j].X*gradient + intercept,
  34. // })
  35. //}
  36. return
  37. }