如何解决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,其中:

enter image description here

我没有在 R 中做过优化,想知道在 R 中有哪些包以及如何设置解决这样一个简单的最小化问题? 谢谢。

解决方法

由于这是一个单输入目标函数,您可以使用 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,col = 4)

curve(fA(x)^2,log="xy")
curve(fB(x)^2,col = 2)
curve(fC(x)^2,col = 4)

curves,log-x scale

same curves,log-log