繁体   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