R - deSolve,参数

标签 r parameters optional-parameters ode differential-equations

我是这个网站的新手。 我正在 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 被传递给实际进行求解的方法,然后传递给您提供的函数,因此必须提供。但它不需要有值,并且您的函数也不需要使用它。

# 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

关于R - deSolve,参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23957432/

相关文章:

delphi - 从 Delphi 中的其他单元定义类型

Ruby 可选参数

c# - 如何为 Action<T1,T2> 获取可选参数

r - 如何使用 Highcharter 创建两个独立的向下钻取图?

r - 试图让 tf-idf 加权在 R 中工作

R plotly忽略文本标签对齐hjust

r - 如何抑制 textmineR R 包中 CreateDtm 的详细信息

java - 参数的变量作为参数

c++ - 如何将用户输入作为参数传递给函数原型(prototype)?

c# - 在可选参数中设置 DateTime 的默认值