如何解决 R 中的简单优化问题

How to solve simple optimization problem in R

我有三个方程,我想求解一个参数,使它们之间的差异最小化。

DifferenceA:   100/(1+d)^50 - 75/(1+d)^25
DifferenceB:   100/(1+d)^50 - 50/(1+d)^15
DifferenceC:   75/(1+d)^25 - 50/(1+d)^15

我想求解参数 d*,使上述差异中的残差平方和最小化,最好使用 R,其中:

我没有在 R 中做过优化,想知道在 R 中使用什么包以及如何设置来解决像这样的简单最小化问题? 谢谢。

由于这是一个单输入 objective 函数,您可以使用 optimize()optim() 用于 R^n → R,即参数向量):

fA <- function(d) 100/(1+d)^50 - 75/(1+d)^25
fB <- function(d)  100/(1+d)^50 - 50/(1+d)^15
fC <- function(d)   75/(1+d)^25 - 50/(1+d)^15

fn <- function(d) {
  vals <- c(fA(d), fB(d), fC(d))
  sum(vals^2)
}


optimize(fn, interval = c(-200, 2e5))

然而,一张快速图表(或一些我懒得做的数学分析)显示所有这些差异都随着 d → ∞ 减少到零——所以答案将是无限的,或者在数值上等于您尝试的间隔的上限(或差异梯度变得如此之小以至于 R 放弃的任何地方)。

curve(fA, from = 1e-5, to = 1e6, log="x")
curve(fB, add = TRUE, col = 2)
curve(fC, add = TRUE, col = 4)

curve(fA(x)^2, from = 1e-5, to = 1e6, log="xy")
curve(fB(x)^2, add = TRUE, col = 2)
curve(fC(x)^2, add = TRUE, col = 4)