2016-09-25 2 views
1

supposons que nous ayons un pde qui décrit l'évolution d'une variable y (t, x) au cours du temps t et de l'espace x, et je voudrais tracer son évolution sur un diagramme tridimensionnel (t, x, y). Avec deSolve je peux résoudre le pde, mais je n'ai aucune idée sur la façon d'obtenir ce type de diagramme.r deSolve - évolution du temps de tracé pde

L'exemple dans l'instruction de paquet deSolve est le suivant, où y est pucerons, t = 0, ..., 200 et 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") 

"out" produit une matrice contenant toutes les données dont nous avons besoin, t, y (x1), y (x2), ... y (x60). Comment puis-je produire un graphique de surface pour montrer l'évolution et la variabilité de y dans (t, x)?

Répondre

0

Les façons changent un peu en fonction de l'utilisation de package. Mais vous pouvez le faire avec peu de frais, car out[,-1] est une forme de matrice idéale pour dessiner la surface. J'ai montré deux exemples en utilisant rgl et plot3D paquet.

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") 

enter image description here