首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R- deSolve,参数

R- deSolve,参数
EN

Stack Overflow用户
提问于 2014-05-30 14:50:13
回答 1查看 986关注 0票数 2

我是这个网站的新手。我在R中实现了一个脚本,我需要利用deSolve,为了做到这一点,我必须定义在编写方程的“变化率”时有用的参数。

这是我的问题,因为我不得不用包来定义这些参数,但实际上我不需要它们,我的意思是,在方程的变化率中,我没有任何参数,所以我想要一个方法来避免它们的定义。

我部分地解决了以这种方式定义参数的问题(不太优雅):

parameters <- c(1)

但我不喜欢这种解决办法。

谢谢您的帮助,如果我的留言不清楚,请向我报告,对不起,英语不是我的第一语言!

这就是密码:

代码语言:javascript
复制
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,就会出错

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-31 15:31:18

parms传递给实际执行求解的方法,然后再传递给所提供的函数,因此必须提供。但是它不需要有一个值,您的函数也不需要使用它。

代码语言:javascript
复制
# 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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23957432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档