解析R中的ode.2D-在空间尺寸上更改参数

问题描述

我正在尝试使用R软件包deSolve中的ode.2D函数来求解2D中的常微分方程模型。我当前的代码是:

library(deSolve)
ModelDif <- function (time,y,pars,N,Da,dx) {
NN <- N*N
Nsp <- matrix(nrow = N,ncol = N,y[1:NN])

with (as.list(pars),{
dNsp <- Rmax * Nsp * (1- Nsp/K)
         zero <- rep(0,N)
         FluxNsp <- -Da * rbind(zero,(Nsp[2:N,] - Nsp[1:(N-1),]),zero)/dx
         dNsp    <- dNsp - (FluxNsp[2:(N+1),] - FluxNsp[1:N,])/dx
         FluxNsp <- -Da * cbind(zero,(Nsp[,2:N] - Nsp[,1:(N-1)]),zero)/dx
         dNsp    <- dNsp - (FluxNsp[,2:(N+1)] - FluxNsp[,1:N])/dx
         return(list(as.vector(dNsp)))
      })
     }
        
pars    <- c(Rmax  = 1.0,K=5)  
     R  <- 20                  
     N  <- 50                  
     dx <- R/N                   
     Da <- 0.03           
     NN <- N*N                    
     yini    <- rep(0,N*N)
     cc      <- c((NN/2):(NN/2+1)+N/2,(NN/2):(NN/2+1)-N/2)
     yini[cc] <- 1
     
     tiempo   <- seq(0,20,by = 1)
     Final <- ode.2D(y = yini,times = tiempo,func = ModelDif,parms = pars,dimens = c(N,N),names = c("Nsp"),N = N,dx = dx,Da = Da,method = rkMethod("rk45ck"))

##Plotting
     
P1 <- subset(Final,select = "Nsp",arr = TRUE)
for(i in 1:length(tiempo)){
TT<-tiempo[i]
image(as.matrix(P1[,i]),xlab = "Lat",ylab = "Lon")
mtext(paste("tiempo = ",TT),side=3)
Sys.sleep(0.5)}

但是,现在我需要用从矩阵中各个单元格获得的值替换主方程式中的固定参数K,该矩阵的大小与用于求解模型的网格大小相同。

例如,将K的固定值替换为K

我已经在网站上搜索解决方案,但是没有一个有效。 我将不胜感激任何建议。 谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)