6

当我遇到一个问题时,我正在用 R 求解微分方程:我需要在我的绘图中添加等倾线和方向场,但我不知道如何去做。我应该安装什么软件包/我应该调用什么功能/我应该手动完成所有操作?

4

3 回答 3

2

这不是答案,而只是评论中给出的答案的摘要:

  • 包装LVCompGames内 给出了这个情节:primer

在此处输入图像描述

  1. 这是@Ben Bolker给出的解决方案。解决方案基于graphics包和filled.contour功能。

在此处输入图像描述

  • 然后@Josh O'Brien 建议使用功能rasterVisvectorplot

在此处输入图像描述

如果您向我们提供有关您希望输出的更多信息,我认为所有答案都可以自定义。

于 2013-01-07T14:37:12.033 回答
1

有一个很棒的包叫做phaseR。它使用deSolve包中的 ODE 求解器,让您轻松添加空斜线、轨迹等。请务必将 ODE 函数的参数命名为“t”、“y”和“parameters”。否则 phaseR 函数会报错:

deriv(t = 0, y = c(x[i], y[j]), parameters = parameters) 中的错误:
未使用的参数 (y = c(x[i], y[j]), parameters = parameters)

这是 Lotka-Volterra 捕食者-猎物系统的工作代码示例:

require(deSolve) 
require(phaseR)

model.LV <- function(t, y, parameters){
  with(as.list(parameters),{

    N<-y[1] 
    P<-y[2]
    dN <- a*N - b*N*P  
    dP <- c*N*P -d*P

    list(c(dN,dP))
  })
}

params.LV<-c(a=0.4, b=0.3, c=0.1, d=0.2)

data.LV<-as.data.frame(lsoda(c(N=1,P=1),seq(1,250,by=0.5), model.LV, params.LV))
# plot the time series of both populations
plot(data.LV$time,data.LV$N, main="Time series of L-V equations", xlab="time", 
     ylab="Population densities N, P",
     type="l", col="green", 
     ylim=c(0,max(data.LV$N,data.LV$C)))
lines(data.LV$time,data.LV$P,col="red")

# plot the trajectories of the system
plot(data.LV$N, data.LV$P, type="l", col="blue", main="Trajectory of L-V equations",
     xlab="Prey density N", ylab="Predator density P", xlim=c(0,5), ylim=c(0,3))
#add Nullclines
nullclines(model.LV, x.lim=c(0.1,5),y.lim=c(0.1,3), parameters=params.LV, system="two.dim", colour=c("green","red"), add=TRUE)
于 2015-06-05T09:29:12.980 回答
0

TeachingDemos 包中的my.symbols功能允许您定义自己的符号以添加到现有绘图中。支持功能ms.arrows已经对基本箭头进行了编码以添加到绘图中,您可以轻松修改它(或其他 ms 功能)以创建要添加的不同符号。

于 2013-01-07T20:56:31.070 回答