反向求解R中的函数或目标搜索

反向求解R中的函数或目标搜索,r,R,我正在努力学习如何应对R,我需要一些帮助。下面是我正在研究的这类问题的一个小例子 myFunction <- function(price1) { prices <- c(1:50) prices[1] <- price1 recursiveA <- vector(length = 51) recursiveA[1] <- 100 for (i in 1:50) { recursiveA[i+1] <- 30*prices[i] +

我正在努力学习如何应对R,我需要一些帮助。下面是我正在研究的这类问题的一个小例子

myFunction <- function(price1) {
  prices <- c(1:50)
  prices[1] <- price1
  recursiveA <- vector(length = 51)
  recursiveA[1] <- 100
  for (i in 1:50) {
    recursiveA[i+1] <- 30*prices[i] + recursiveA[i]
  }
  target <- recursiveA[51]
  return(target)
}

myFunction这里实际上不需要递归函数

以下是矢量化方法:

f <- function(x) tail(cumsum(c(100, 30*c(x, 2:50))), 1)
f(123)
# 42010
R将搜索[-10001000],试图找到一个值,
x
,该值使
myFunction(x)-42010的绝对值最小化。在本例中,它查找
123
,其中
myFunction(123)
返回
42010
,因此
abs(myFunction(x)-42010)
返回
0

如果要将其包装到函数中,可以执行以下操作:

f <- function(x) abs(myFunction(x) - 42010) 
optimize(f, lower=-1000, upper=1000)

# $minimum
# [1] 123
# 
# $objective
# [1] 2.512278e-05
unfunction <- function(x, lower, upper) {
  optimize(function(y) abs(myFunction(y) - x), lower=lower, upper=upper)
}

unfunction(42010, -1000, 1000)

# $minimum
# [1] 123
# 
# $objective
# [1] 2.512278e-05

unfunction(47320, -1000, 1000)

# $minimum
# [1] 300
# 
# $objective
# [1] 0.0002383182

unfunction您可以通过将
y=f(x)
重写为
f(x)-y
并找到其根来优化任何函数。即使函数使用递归输入?我对很多这类东西都很陌生,因此如何重写我以这种形式给出的函数。
myFunction(x)
返回一些值。您希望该值等于
target\u value)
Write
func2具体来说,您可能需要这样的值:
func2 ahhh!好了。刚刚运行了你给我@jbaums的代码,我想这会有用的。我将需要更多的测试,但我认为这肯定可以工作!非常感谢你!大学毕业几年后,我忘记了很多基础数学。再次感谢。啊!我知道当我用R编码时,我应该尽可能多地用向量来思考。但是我上面给出的例子是我试图做的一个非常简化的版本。我想反转的函数要复杂得多,不能用代数运算来求解。我在寻找一种反转函数的通用方法。现在,我正在尝试卡尔·维特霍夫的方法。但我正在为语法而挣扎。我想情况就是这样,但我认为发布这篇文章不会有什么坏处:)当然,它仍然很有帮助。但是我的头因为想弄清楚
optim()
函数而痛
unfunction <- function(x, lower, upper) {
  optimize(function(y) abs(myFunction(y) - x), lower=lower, upper=upper)
}

unfunction(42010, -1000, 1000)

# $minimum
# [1] 123
# 
# $objective
# [1] 2.512278e-05

unfunction(47320, -1000, 1000)

# $minimum
# [1] 300
# 
# $objective
# [1] 0.0002383182