2013-03-06 70 views
0

我想找到一個邏輯分佈函數的固定點,並確定不同參數值的固定點如何變化。代碼看起來像:尋找一個函數的固定點

nfxp.reps <- 0 
err <- 10 
p <- seq(0, 1, by = 0.0001) 
pold <- p 
gamma <- 6 
k <- 3 
while (err > 1E-12) { 
    nfxp.reps <- nfxp.reps + 1 
    if (nfxp.reps > 999) { 
    stop("The number of NFXP reps needs to be increased. \n") 
    } 
    pnew <- plogis(-k + gamma * pold) 
    err <- max(abs(pnew - pold)) 
    pold <- pnew 
} 

上面的代碼工作得非常好在上述參數選擇:伽馬和k - 找到3個固定點,2穩定和不穩定的1(其中,p = 0.5)。然而如果我改變上述參數非等比,其中中間固定點是高於或低於0.5,譬如說:

gamma<-7 
k<-3 

環路無法定位的中間固定點,其爲p = 0.3225(如果gamma = 7,k = 3)

回答

1

施工不動點迭代找不到不穩定平衡點在你的安裝,因爲它是排斥。換句話說,除非你從不穩定的均衡開始,否則nfxp算法將始終離開它。

另一種方法是使用根解決方法。當然,並不能保證所有的固定點都能找到。下面是一個簡單的例子:

library(rootSolve) # for the uniroot.all function 
pfind<-function(k=3,gamma=7) 
{ 
pdiff <-function(p0) p0-plogis(-k + gamma * p0) 
uniroot.all(p.diff,c(0,1)) 
} 
> fps= pfind() 
> fps 
[1] 0.08036917 0.32257992 0.97925817 

我們可以驗證這一點:

pseq =seq(0,1,length=100) 
plot(x=pseq ,y= plogis(-k + gamma *pseq),type= 'l') 
abline(0,1,col='grey') 
points(matrix(rep(fps,each=2), ncol=2, byrow=TRUE),pch=19,col='red') 

希望這有助於。

+0

非常感謝! – user1682980 2013-05-10 11:18:25

1

我重新安排您的代碼在一個新的功能。

p.fixed <- function(p0,tol = 1E-9,max.iter = 100,k=3,gamma=7,verbose=F){ 
    pold <- p0 
    pnew <- plogis(-k + gamma * pold) 
    iter <- 1 
    while ((abs(pnew - pold) > tol) && (iter < max.iter)){ 
     pold <- pnew 
     pnew <- plogis(-k + gamma * pold) 
     iter <- iter + 1 
     if(verbose) 
     cat("At iteration", iter, "value of p is:", pnew, "\n") 
    } 
    if (abs(pnew - pold) > tol) { 
     cat("Algorithm failed to converge") 
     return(NULL) 
    } 
    else { 
     cat("Algorithm converged, in :" ,iter,"iterations \n") 
     return(pnew) 
    } 
} 

一些測試:

p.fixed(0.2,k=3,gamma=7) 
Algorithm converged, in : 30 iterations 
[1] 0.08035782 
> p.fixed(0.2,k=5,gamma=5) 
Algorithm converged, in : 7 iterations 
[1] 0.006927088 
> p.fixed(0.2,k=5,gamma=5,verbose=T) 
At iteration 2 value of p is: 0.007318032 
At iteration 3 value of p is: 0.006940548 
At iteration 4 value of p is: 0.006927551 
At iteration 5 value of p is: 0.006927104 
At iteration 6 value of p is: 0.006927089 
At iteration 7 value of p is: 0.006927088 
Algorithm converged, in : 7 iterations 
[1] 0.006927088 
+0

感謝以上。然而,正如你所看到的,上述代碼也無法在任何參數規範下找到不穩定的均衡。在k = 3和γ= 7下,固定點應該是(0.08035,0.3225,097926),它總是錯過中間點。 – user1682980 2013-03-07 11:31:27

+0

@ user1682980你怎麼知道結果?我該如何檢查? – agstudy 2013-03-07 11:34:05

+0

只需通過圖形測試,最終的代碼需要在結構中添加大量的協變量,所以這只是一個簡單的循環,以便我可以確定找到所有固定點,當存在多個固定點時對於某些參數值。 – user1682980 2013-03-07 11:37:52