使用 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 (将#修改为@)