golang 实现最小二乘法拟合直线

func LeastSquares(x[]float64,y[]float64)(a float64,b float64){
    // x是横坐标数据,y是纵坐标数据
    // a是斜率,b是截距
    xi := float64(0)
    x2 := float64(0)
    yi := float64(0)
    xy := float64(0)

    if len(x)!= len(y) {
        beego.Debug("最小二乘时,两数组长度不一致!")
    }else {
        length := float64(len(x))
        for i := 0; i < len(x); i++{
            xi += x[i]
            x2 += x[i] * x[i]
            yi += y[i]
            xy += x[i] * y[i]
        }
        a = (yi * xi - xy * length) / (xi * xi - x2 * length)
        b = (yi * x2 - xy * xi) / (x2 * length - xi * xi)
    }
    return
}

猜你喜欢

转载自www.cnblogs.com/zheng123/p/9301553.html