使用R来解决ODE

时间:2018-04-12 20:45:39

标签: r ode

我尝试使用R解决ODE,因为我无法访问matlab

方程式

dh/dt = 0.1*v/(pi*(2*10*h-h^2))

v^2 = (-0.1*v/(pi*(2*10*h-h^2))^2) + 2*9.81*h))
vdpol <- function (h, v, t) ( 
      list(c (
        -0.1*v/(pi*(2*10*h-h^2)),
          (v^2 = (-0.1*v/(pi*(2*10*h-h^2))^2) + 2*9.81*h))

              ))
library(deSolve)
yini <- (c(h = 20, v=0))
nonstiff <- ode(y = yini, func = vdpol,
                times= seq(0, 30, by = 0.01),
                parms = 1) 

弹出的问题是:

  

func()(4)返回的导数必须等于初始条件向量的长度(2)

我不是为什么它表明当我只输出两个时输入4个衍生物

1 个答案:

答案 0 :(得分:2)

IIUC,ode期望具有给定格式的函数。请参阅 here

因此,如果您更改vdpol()函数以满足预期格式,则应该运行它。一般格式为func(t, state, parameters),其中state控制您的变量,parameters控制其他参数。

vdpol <- function (t, state, parameters) ( 
    with(as.list(c(state)), {
    return(list(c (-0.1*v/(pi*(2*10*h-h^2)),
                  (-0.1*v/(pi*(2*10*h-h^2))^2) + 2*9.81*h)))
    })
)

state = c(h = 10, v = 0)
times= seq(0, 30, by = 0.01)
out <- ode(y = state, times = times, func = vdpol, parms = c())
plot(out)

Plot output