R定点函数

时间:2015-05-26 20:43:57

标签: r function fixed-point

我正在寻找一个固定点x当函数的f(x)=x,在数值上,但我不知道如何用R解决它,我正在尝试使用fsolve下面的代码,但可能不是正确的方式来写这个...我没有得到任何东西......非常感谢提前

library(pracma)  
p<- c(x=0.1, y=0.1)
f1 <- function(p) {
                expPfLeft<- (160*p[1]) + ((1-p[1])*200)
                expPfRight<- (10*p[1])+ ((1-p[1])*370)
                expPfTop <- (200*p[2]) + ((1-p[2])*160)
                expPfBottom <- (370*p[2]) + ((1-p[2])*10) 

                return(c (exp(2*expPfLeft)/((exp(2*expPfLeft)+exp(2*expPfRight))) , 
                          exp(2*expPfTop)/((exp(2*expPfTop))+(exp(2*expPfBottom))) ) )


        }


fsolve(f1,p)

1 个答案:

答案 0 :(得分:1)

假设您的功能已正确定义。您正在寻找f(p[1], p[2]) = c(p[1], p[2])

您可以通过将return语句更改为:

来创建修复答案

return(c(exp(2*expPfLeft)/((exp(2*expPfLeft)+exp(2*expPfRight))), exp(2*expPfTop)/((exp(2*expPfTop))+(exp(2*expPfBottom)))) - p)

我们可以观察到你的优化函数实际上是两个独立的函数。左,右使用p[1]。顶部和底部使用p[2]

我们可以分开你的职能。

f.x <- function(p) {
  expPfLeft<- (160*p) + ((1-p)*200)
  expPfRight<- (10*p)+ ((1-p)*370)
  return(exp(2*expPfLeft)/((exp(2*expPfLeft)+exp(2*expPfRight))) - p)
}

f.y <- function(p) {
  expPfTop <- (200*p) + ((1-p)*160)
  expPfBottom <- (370*p) + ((1-p)*10) 
  return(exp(2*expPfTop)/((exp(2*expPfTop))+(exp(2*expPfBottom))) - p)
}

简化你的表达,这样我们可以为起始值作弊一点

enter image description here

我们可以看到x = 1时只有一个近似近似解。

fsolve(f.x, 1)

$x
[1] 1

$fval
[1] 0

类似于第二个函数,有一个0.4689的解决方案。

fsolve(f.y, 0.1)

$x
[1] 0.4689443

$fval
[1] 4.266803e-09

这一切都违背了优化的目的,并让我相信你的优化功能是错误定义的。