在ml代码中,直接调用netlib-java封装的dppsv方法实现。...在每次迭代内部,第一步会求梯度res,代码如下
//y := alpha*A*x + beta*y 即 y:=1.0 * ata * x + 0.0 * res
blas.dgemv("N", n,...n, 1.0, ata, n, x, 1, 0.0, res, 1)
// ata*x - atb
blas.daxpy(n, -1.0, atb, 1, res, 1)
dgemv方法的作用是得到y...//在第一次迭代中,搜索方向dir即为梯度方向
blas.dcopy(n, grad, 1, dir, 1)
在第k次迭代中,搜索方向由梯度方向和前一步的搜索方向共同确定,计算依赖的公式是(2.9)...具体代码有两行
val alpha = ngrad / lastNorm
//alpha*lastDir + dir,此时dir为梯度方向
blas.daxpy(n, alpha, lastDir,