R语言deSolve包求解微分方程添加sin(t)项时报导数数量不匹配错误
错误原因
- 变量名拼写错误:你自定义的微分方程函数第一个入参是表示时间的
time,但方程中写的是sin(t)。R语言中t是内置的转置函数,你没有声明变量t的情况下直接调用,会导致运算逻辑完全错乱,最终返回的导数长度和初始条件长度不匹配。 - 向量命名错误:定义参数向量
params和初始状态向量initial_state时,在c()内部使用了赋值符<-而非=,导致向量元素没有对应名称,后续with(as.list())调用时无法识别A、X、Y这些变量。
修复方法
- 将方程中的
sin(t)修改为sin(time),匹配函数入参的时间变量名 - 将
params和initial_state定义时的<-替换为=,给向量元素正确命名
修正后可运行代码
library(deSolve) delta_conc <- function(time, current_state, params) { with(as.list(c(current_state, params)),{ dX <- Y dY <- X - X^3 - 0.25*Y + A * sin(time) return(list(c(dX, dY))) }) } params <- c( A = 0.2645 ) initial_state <- c( X = 0.9, Y = 0.4 ) times <- 1:10 model <- ode(initial_state, times, delta_conc, params) summary(model) matplot(model, type="l",lty=1, main="Enzyme model", xlab="Time")
内容的提问来源于stack exchange,提问作者Barnabas
相关产品推荐
相关产品推荐

