尝试求解线性系统时克服奇点

时间:2019-05-17 13:04:52

标签: r

我正在尝试使用牛顿法算法求解罚函数。它使用粗麻布和转置梯度来求解线性系统,该线性系统将为我提供近似值。

我的代码的问题始于第十次迭代(但它可能会因初始猜测而异,我称之为“斜道”),因为粗麻布实际上是一个奇异矩阵。在这种情况下应该怎么办?我的算法有问题吗?

我实际上并没有粘贴要优化的功能,因为它非常广泛,但是如果有其他要求,我会做。

我尝试了不同的函数,但是我从算法中获得的唯一正确答案是函数F(x,y)= x ^ 2 + y ^ 2。 (x,y)=(0,0)。

for(i in 1:n){
  hessian <- hessian(f = f, x = chute, centered = TRUE)
  gradient.transposed <- -1 * t(gradient(f = f, x = chute))

  # solving the linear system
  sk <- qr.solve(hessian, gradient.transposed)
  xk.1 <- xk + sk
  k[[i]] <- xk.1

  # calculating a test to verify the solution
  first.test <- (norm(xk - xk.1) < epsilon * (1 + norm(xk)))
  g[[i]] <- first.test
  if(first.test == TRUE){
    # calculating a test to verify the solution
    second.test <- (norm(gradient.transposed) <= delta * (1 + abs(f(xk))))
    h[[i]] <- second.test
    if(second.test == TRUE){
      root.approx <- tail(k)[[1]]
      res <- list('aprox' = root.approx, 'iter' = k)
      return(res)
    }
  }

  xk <- xk.1

  chute <- c(xk.1)
}

我尝试通过某些迭代获得的错误消息是:

“ qr.solve(hessian,gradient.transposed)中的错误:   求解中的奇异矩阵“ a””

非常感谢您的关注和未来的答复。

编辑:我正在使用rootSolve包来查找数字粗麻布和渐变。还修正了一些错字。

0 个答案:

没有答案