R函数的不动点
R fixed point of a function
我正在寻找函数的 f(x)=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)
假设您的函数定义正确。您正在寻找 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
这样做违背了优化的目的,让我相信你的优化函数定义错误。
我正在寻找函数的 f(x)=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)
假设您的函数定义正确。您正在寻找 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
这样做违背了优化的目的,让我相信你的优化函数定义错误。