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
包来查找数字粗麻布和渐变。还修正了一些错别字。
解决方案
推荐阅读
- node.js - 当前日期和当前日期+2天的Java脚本时刻日期计算
- rollup - 如何使用 Deno 在运行时编译汇总?
- c# - Microsoft.Data.SqlClient.SqlConnection 在调试/发布中工作,但在安装程序中失败
- java - 为什么非易失性变量在 CPU 共享缓存上更新?
- django - 使用参数作为 url 的一部分以及如何在 django rest 框架上处理它
- discord - 尝试为不和谐机器人设置权限,但似乎无法
- c - 如何检查二维数组中两个单元格之间的直接路径是否被给定单元格阻塞?
- python - FTP:如何处理挂起和恢复下载?
- python - 词干词频
- java - 我应该使用 cacerts 还是本地 trustore 但不能同时使用两者?