0

我正在寻找一个函数的固定点xf(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)
4

1 回答 1

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)
}

简化您的表达式,以便我们可以在初始值上作弊

在此处输入图像描述

我们可以看到在 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

做这一切违背了优化的目的,让我相信你的优化函数定义错误。

于 2015-05-26T21:59:32.303 回答