nlm() 或 optimize() 比 R 中的 optim() 更精确
are nlm() or optimize() more precise than optim() in R
我正在尝试在名为 GGG
.
的函数中更精确地(最多 6 位小数)估计 x[1]
和 x[2]
使用 optim
,我得到了小数点后 3 位的精度,但我想知道如何才能将精度提高到至少 6 位小数?
optimize
和 nlm
可以用于这个目标吗?
GGG = function(Low, High, p1, p2) {
f <- function(x) {
y <- c(Low, High) - qcauchy(c(p1, p2), location=x[1], scale=x[2])
}
## SOLVE:
AA <- optim(c(1,1), function(x) sum(f(x)^2) )
## return parameters:
parms = unname(AA$par)
return(parms) ## Correct but up to 3 decimal places
}
## TEST:
AAA <- GGG (Low = -3, High = 3, p1 = .025, p2 = .975)
## CHECK:
q <- qcauchy( c(.025, .975), AAA[1], AAA[2] ) # What comes out of "q" MUST match "Low" and
# "High" up to 6 decimal places
optim 函数有一个公差控制参数。用这个替换你的优化函数:
AA <- optim(c(1,1), function(x) sum(f(x)^2), control=list(reltol=(.Machine$double.eps)))
Returns:
> q
[1] -3 3
> AAA
[1] 5.956798e-08 2.361051e-01
我正在尝试在名为 GGG
.
x[1]
和 x[2]
使用 optim
,我得到了小数点后 3 位的精度,但我想知道如何才能将精度提高到至少 6 位小数?
optimize
和 nlm
可以用于这个目标吗?
GGG = function(Low, High, p1, p2) {
f <- function(x) {
y <- c(Low, High) - qcauchy(c(p1, p2), location=x[1], scale=x[2])
}
## SOLVE:
AA <- optim(c(1,1), function(x) sum(f(x)^2) )
## return parameters:
parms = unname(AA$par)
return(parms) ## Correct but up to 3 decimal places
}
## TEST:
AAA <- GGG (Low = -3, High = 3, p1 = .025, p2 = .975)
## CHECK:
q <- qcauchy( c(.025, .975), AAA[1], AAA[2] ) # What comes out of "q" MUST match "Low" and
# "High" up to 6 decimal places
optim 函数有一个公差控制参数。用这个替换你的优化函数:
AA <- optim(c(1,1), function(x) sum(f(x)^2), control=list(reltol=(.Machine$double.eps)))
Returns:
> q
[1] -3 3
> AAA
[1] 5.956798e-08 2.361051e-01