首页 > 解决方案 > 尝试求解线性系统时越过奇点

问题描述

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

我的代码的问题从第十次迭代开始(但它可能会根据最初的猜测而有所不同,我称之为“滑槽”),因为粗麻布原来是一个奇异矩阵。在这种情况下应该怎么做?我的算法有问题吗?

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

我尝试了不同的函数,但我从算法中得到的唯一正确答案是函数 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包来查找数字粗麻布和渐变。还修正了一些错别字。

标签: r

解决方案


推荐阅读