我尝试使用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个衍生物
答案 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)