我想用R来数值求解一个称为Lane-Emden方程的特定微分方程。 https://en.wikipedia.org/wiki/Lane%E2%80%93Emden_equation#Numerical_solutions
我对如何在deSolve中为ODE求解器提出问题感到困惑。我有一些代码,它给出了一个我不理解并且不知道如何解决的错误。
我试图改编K Soetart等人的《解决R中的微分方程》一书中的例子。
library(deSolve)
x <- seq(0,20,0.1)
n <- 1
y_ini <- c(phi=0, theta=1)
derivs <- function(x,y,parms){
with(as.list(y),{
dtheta <- -phi/(xi^2)
dphi <- theta^n * xi^2
list(c(dtheta,dphi))})
}
out <- ode(y=y_ini,times <- x,func = derivs,parms=NULL)
eval(substitute(expr),data,enclos = parent.frame())中的错误:找不到对象'xi'调用:... func2-> func-> with-> with.default-> eval-> eval执行暂停
答案 0 :(得分:0)
执行注释中提到的所有更改:
xi
的参数列表中使用derivs
代替x
,theta
和phi
的顺序提供代码
library(deSolve)
x <- seq(0.0001,20,0.1)
n <- 1
y_ini <- c(theta=1, phi=0 )
derivs <- function(xi,y,parms){
with(as.list(y),{
dtheta <- -phi/(xi^2)
dphi <- theta^n * xi^2
list(c(dtheta,dphi))})
}
out <- ode(y=y_ini,times <- x,func = derivs,parms=NULL)
print(out)
theta <- out[,"theta"]
plot(times, theta)
然后生成图