R中非线性方程组的求解
我试图在R中解一个非线性方程组,但它总是给我一个错误“要替换的项目数不是替换长度的倍数” 我的代码如下所示:R中非线性方程组的求解,r,nonlinear-optimization,R,Nonlinear Optimization,我试图在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]
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")
my_data太长,无法发表评论
如果不了解你的数据,就不可能证实这一点,但是
您正在传递fnewton(…)
长度为2的向量,并期望长度为2的向量作为返回值。但在函数中,d1
和d2
被设置为长度为2508的向量。然后尝试将y[1]
和y[2]
设置为长度为2508的向量。R不能这样做,因此它使用RHS中的第一个值并提供警告
我建议你逐步完成你的功能,看看每一行都在做什么
我无法提出解决方案,因为我不知道您想要实现什么。您并没有像编写fnewton
那样的“方程组”。我可以推荐(免责声明:我是作者)您看看ktsolve
软件包吗?你可能会发现它会让你更容易找到你想要的解决方案。除了将命名标量变量的集合传递到函数中之外,您几乎可以按照编写的方式使用fnewton
如果您想解决(使用nleqslv或KTSOLV)各种输入“起点”,那么您应该将您的方法封装在一个循环或*应用函数中。谢谢您的评论!我写了一个循环,即使使用fnewton,它也能完美工作:)是的,这是我的问题,我不知道如何“告诉程序”,我实际上也希望我的答案长度为2508。我对R很陌生,所以它给我带来了一些问题,但是写一个循环解决了所有问题。谢谢你的评论。