我是这个网站的新手。 我在R中实现了一个脚本,我需要使用deSolve,为了做到这一点,我必须定义在编写方程式的“变化率”时有用的参数。
这是我的问题,因为使用包我必须定义那些参数,但我实际上不需要它们,我的意思是在我的方程的变化率我没有任何参数所以我是要求一种方法来避免他们的定义。
我部分解决了以这种方式定义参数的问题(不是很优雅):
parameters <- c(1)
但我不喜欢这种解决方案。
提前感谢您的帮助,如果我的信息不明确请报告给我,抱歉,英语不是我的第一语言!
这就是代码:
parameters <- c(1)
e=0.2056
ini <- c(q1 =1-e, q2 = 0, p1 = 0, p2 = sqrt ((1+e)/(1-e)) )
rhs <- function(t, ini,parameters)
{
with(as.list(c(ini,parameters)),{
# rate of change
dq1 <- p1
dq2 <- p2
dp1 <- -q1/((q1^2+q2^2)^(3/2))
dp2 <- -q2/((q1^2+q2^2)^(3/2))
# return rate of change
list(c(dq1,dq2,dp1,dp2))
} )
}
###### EULER ######
library(deSolve)
times <- seq(0,40, by = 0.0005)
out<- ode(y = ini, times = times, func = rhs, parms = parameters,method="euler")
head(out)
'ode'需要这些参数,如果我没有把parms
,则说错误答案 0 :(得分:1)
parms
被传递给实际执行求解的方法,然后传递给您提供的函数,因此必须提供。但它并不需要有价值,而且你的功能也不需要使用它。
# Accept and ignore third argument
rhs <- function(t, ini,...)
{
with(as.list(c(ini)),{
# rate of change
dq1 <- p1
dq2 <- p2
dp1 <- -q1/((q1^2+q2^2)^(3/2))
dp2 <- -q2/((q1^2+q2^2)^(3/2))
# return rate of change
list(c(dq1,dq2,dp1,dp2))
} )
}
# Pass NULL to parms
out2 <- ode(y = ini, times = times, func = rhs, parms = NULL,method="euler")
identical(out, out2)
## [1] TRUE