[英]Solving system of nonlinear equations in R
我試圖解決R中的非線性方程組,但它一直給我這個錯誤“要替換的項目數不是替換長度的倍數”。
我的代碼看起來像這樣:
my_data <- Danske
D <- my_data$D
V <- my_data$V
r <- my_data$r
s <- my_data$s
fnewton <- function(x)
{
y <- numeric(2)
d1 <- (log(x[1]/D)+(r+x[2]^2/2))/x[2]
d2 <- d1-x[2]
y[1] <- V - (x[1]*pnorm(d1) - exp(-r)*D*pnorm(d2))
y[2] <- s*V - pnorm(d1)*x[2]*x[1]
y
}
xstart <- c(239241500000, 0.012396)
nleqslv(xstart, fnewton, method="Newton")
D,V,r和s是數值[1:2508]值,我認為這就是問題所在。 如果我有單個值1x1,它可以很好地解決它,但是,如果我插入2508個值的向量,它只計算第一個x1和x2,然后出現上面寫的消息警告。
感謝您的任何幫助。
麗娜
評論太久了。
沒有你的數據靦腆,這是不可能驗證這一點,但......
你傳遞fnewton(...)
一個長度為2的向量,並期望一個長度為2的向量作為返回值。 但是在你的函數中, d1
和d2
被設置為長度為2508的向量。然后你試圖將y[1]
和y[2]
設置為長度為2508的向量.R不能這樣做,所以它使用了第一個值RHS並提供警告。
我建議你逐步完成你的功能,看看每條線路在做什么。
無法提出解決方案,因為我不知道你想要完成什么。
你沒有像編寫fnewton
那樣擁有方程式的“系統”。 我可以推薦(免責聲明:我是作者)你看看ktsolve
包嗎? 您可能會發現它可以讓您更輕松地找到您正在尋找的解決方案。 您可以使用幾乎所寫的fnewton
,除了您將命名標量變量的集合傳遞給函數。
如果你想為各種輸入“起始點”解決(使用nleqslv或ktsolve),那么你應該將你的方法包裝在循環或*apply
函數中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.