簡體   English   中英

R中非線性方程組的求解

[英]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的向量作為返回值。 但是在你的函數中, d1d2被設置為長度為2508的向量。然后你試圖將y[1]y[2]設置為長度為2508的向量.R不能這樣做,所以它使用了第一個值RHS並提供警告。

我建議你逐步完成你的功能,看看每條線路在做什么。

無法提出解決方案,因為我不知道你想要完成什么。

你沒有像編寫fnewton那樣擁有方程式的“系統”。 我可以推薦(免責聲明:我是作者)你看看ktsolve包嗎? 您可能會發現它可以讓您更輕松地找到您正在尋找的解決方案。 您可以使用幾乎所寫的fnewton ,除了您將命名標量變量的集合傳遞給函數。

如果你想為各種輸入“起始點”解決(使用nleqslv或ktsolve),那么你應該將你的方法包裝在循環或*apply函數中。

暫無
暫無

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

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