微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 deSolve 时,如何将初始条件强加到离散化 PDE 上?

如何解决使用 deSolve 时,如何将初始条件强加到离散化 PDE 上?

我试图用一个常微分方程和一个二阶偏微分方程求解微分方程组。我已经对 PDE 进行了离散化,以便可以使用 deSolve ode.1D 求解它,但现在我无法弄清楚如何为空间 dE/dx 导数包含我的边界条件。 x = 0 和 x = 1 处的 dE/dx 边界值对于获得正确解很重要。我如何将它们包含在模型中?

我的代码

BVmod1D <- function(time,state,parms,N,dx) {
  with(as.list(parms),{
    E <- state[1 : N]
    U <- state[(N + 1) : (2 * N)]
    

    coef1 <- Sv * io / (Qox - Qred)
    coef2 <- Tau * io / Cd
    BV <- exp(aa * f * (E - 0.5 * (1 + U) )) - exp(-ac * f * (E - 0.5 * (1 + U)))


    dEdx <- diff(c(E,E[N])) / dx # first spatial derivative of E
    ddEddx <- diff(c(dEdx,dEdx[N])) / dx # second spatial derivative of E
    

    dU <- coef1 * BV # dU/dt,Eqn 8
    dE <- (ddEddx - (coef2 * BV)) / Tau #  dE/dt,Eqn 12

    return(list(c(dE,dU)))
  })
}


pars <- c(Sv = 1.72e5,io = 1.71e-6,Qox = 1.56,Qred = 0,Tau = 3.79e-6,Cd = 7.42e-8,aa = 0.7674,ac = 0.2326,ks = 0.042992,sig = 1.67e-6,f = 38.92237)


R <- 1
N <- 50
dx <- R / N
Vo <- 0.5


# Initial and Boundary Conditions

yini <- rep(0,(2 * N))
yini[ 1 : N ] <- 2 * Vo
yini[ (N + 1) : (2 * N)] 
times <- seq(0,1,by = 0.002 ) 


tail(out <- ode.1D(
  y = yini,times = times,func = BVmod1D,parms = pars,nspec = 2,N = N,dx = dx
))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。