假设我们有一个描述变量y(t,x)随时间t和空间x的演化的pde,我想在三维图(t,x,y)上绘制它的演化。使用deSolve,我可以解决pde,但我不知道如何获得这种图表。
deSolve包指令中的示例如下,其中y是蚜虫,t = 0,...,200和x = 1,...,60:
library(deSolve)
Aphid <- function(t, APHIDS, parameters) {
deltax <- c (0.5, rep(1, numboxes - 1), 0.5)
Flux <- -D * diff(c(0, APHIDS, 0)) / deltax
dAPHIDS <- -diff(Flux) / delx + APHIDS * r
list(dAPHIDS )
}
D <- 0.3 # m2/day diffusion rate
r <- 0.01 # /day net growth rate
delx <- 1 # m thickness of boxes
numboxes <- 60
Distance <- seq(from = 0.5, by = delx, length.out = numboxes)
APHIDS <- rep(0, times = numboxes)
APHIDS[30:31] <- 1
state <- c(APHIDS = APHIDS) # initialise state variables
times <-seq(0, 200, by = 1)
out <- ode.1D(state, times, Aphid, parms = 0, nspec = 1, names = "Aphid")
&#34;列&#34;生成一个矩阵,包含我们需要的所有数据,t,y(x1),y(x2),... y(x60)。如何生成表面图以显示(t,x)中y的演变和变化?
答案 0 :(得分:1)
根据使用包的方式改变一下。但是你可以用很少的代价去做,因为out[,-1]
是绘制曲面的理想矩阵形式。我使用rgl
和plot3D
包展示了两个示例。
out2 <- out[,-1]
AphID <- 1:ncol(out2)
library(rgl)
persp3d(times, AphID, out2, col="gray50", zlab="y")
# If you want to change color with value of Z-axis
# persp3d(times, AphID, out2, zlab="y", col=topo.colors(256)[cut(c(out2), 256)])
library(plot3D)
mat <- mesh(times, AphID)
surf3D(mat$x, mat$y, out2, bty="f", ticktype="detailed", xlab="times", ylab="AphID", zlab="y")