Предположим, что f (k) = exp (k/200) - 1 и мы хотим минимизировать (f (a) + f (b) + f (c) + f (d) - pi)^2. Решение должно быть a = 6, b = 75, c = 89, d = 226. Сумма квадратов для этого решения составляет ~ 8e-17.Оптимизация в R - недостаточно точно
sumsq <- function(theta, n=200) {
f <- function(k) exp(k/n) - 1
(f(theta[1]) + f(theta[2]) + f(theta[3]) + f(theta[4]) - pi)^2
}
theta <- optim(par=c(10, 90, 70, 300), fn=sumsq)
# theta$par = 62.97 106.89, 78.64, 189.82
# theta$value = 6.32e-10
# sumsq(c(6,75,89,226)) = 8.20e-17
Итак, ясно, решение а = 6, б = 75, С = 89, D = 226 лучше, чем того, который дал Optim функции путем сравнения суммы квадратов. Я хотел бы знать, как сделать R более точным с его методикой оптимизации. Я также пробовал функцию nlm() без успеха.
Значения пи используемого +3,1415926535897931 - Я думаю, что точность пи не является причиной, почему Optim функция не производит оптимальное решения
Я не очень беспокоюсь об этой конкретной проблеме, но о том, как повысить точность методов оптимизации R в целом – nathanesau
R считает, что эти числа не отличаются: 'all.equal (theta $ value, sumsq (c (6) , 75,89,226))) 'и равны нулю' all.equal (theta $ value, 0) '. Можете ли вы масштабировать функцию, чтобы сделать различия более очевидными для численного решения? – MrFlick
Я бы предположил, что проблема имеет несколько решений. Я подозреваю, что если вы возьмете разные стартовые условия, вы найдете другой минимум. Это было бы характерно для задач численной оптимизации и не связано с R. – RHertel