反向求解R中的函数或目标搜索
我正在努力学习如何应对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] +
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)
Writefunc2具体来说,您可能需要这样的值: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