簡體   English   中英

R function "uniroot": 搞錯了

[英]R function "uniroot": get some mistake

FX <- function(x)(3/4)*(1-x^2) 
M <- 5000
X2 <- rep(NA,M)
for (i in 1:M) {
   U2 <- runif(1)
   fct <- function(x)FX(x)-U2
   X2[i] <- uniroot(fct,c(-1,1))$root
}

我曾嘗試執行此 R 代碼,但每次我出錯時都會說:

uniroot(fct, c(-1, 1)) 中的錯誤:端點處的 f() 值不是相反的符號

我不明白問題是什么以及如何解決它。

我不明白您要做什么,但是:

當您運行uniroot()時,它會做的第一件事是評估區間上下端的 function 以查看它們是否具有相反的符號。 如果不是,則不能保證 function 在區間中有根,並且uniroot()甚至不會嘗試。

您指定的間隔是(-1,1) FX在區間的兩端都為零,因此FX(x) - U2在兩端都等於-U2 ,因此目標將始終為負數(介於 0 和 -1 之間)並且兩端都為負數。

原則上,您可以設置extendInt = "yes"uniroot()擴大您正在查看的區間,但這會失敗(“在 1000 次迭代中沒有發現符號變化”),可能是因為您指定的初始區間是對稱的零——因此,如果 R 嘗試在兩側將其擴大相同的量,則(1-x^2)將始終在區間的兩端具有相同的值,因此您的測試 function 也將相同,因此它將具有同一個標志...

由於您的 function 永遠不會達到 3/4,因此只要您的U2值大於 3/4(25% 的時間),您的目標 function 就不會有任何真正的根源......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM