我的二次导数非均质函数做错了什么?

问题描述 投票:0回答:1

我想写一个微分方程的函数。

y'' + y = bcos(omega *t)

以下是我的代码

   library(deSolve)
   yini <- c(y1 = 2, y2 = 0)
   nonvdp1 <- function(t, y, parms) {
      b <- parms['b']
      omega <- parms['omega']
      dy1dt <- y[2]
      dy2dt <- b * cos(omega * t) - y[1]
      list(c(dy1dt, dy2dt))
   }
   output <- as.data.frame(ode(y = yini, func = nonvdp1, times = (0, 30, 0.1), parms = c(2, 2)))

然而,解决方法却不尽如人意

   head(nonvdp1snl)
   time y1 y2
   1    0  2  0
   2    1 NA NA
   3    2 NA NA
   4    3 NA NA
   5    4 NA NA
   6    5 NA NA

根据初始条件,以及我选择的参数,解为

y = (8/3)cos(t) - (2/3)cos(2t)

我的代码做错了什么?

function ode
1个回答
1
投票

你的代码有几个问题,一个被遗忘的 seq 的时间步长和参数名称的缺失。与下面的比较。

library(deSolve)
yini <- c(y1 = 2, y2 = 0)
nonvdp1 <- function(t, y, parms) {
  b     <- parms['b']
  omega <- parms['omega']
  dy1dt <- y[2]
  dy2dt <- b * cos(omega * t) - y[1]
  list(c(dy1dt, dy2dt))
}

output <- ode(y = yini, func = nonvdp1, times = seq(0, 30, 0.1), 
  parms = c(b = 2, omega = 2))

output

plot(output)

如果你删除 as.data.frame()您可以使用内置的绘图功能 plot.deSolve.

© www.soinside.com 2019 - 2024. All rights reserved.