我正在研究随机微分方程的模拟。我想为获得的轨迹制作时间演化动画。我通过library(anim.plots)
在R中尝试过(我无法弄清楚如何使用library(animation)
制作时间演化动画。)我设法绘制了两个轨迹,但不是同时绘制。我尝试了合并功能,但我没有获得所需的结果。代码如下
library(Sim.DiffProc)
library(anim.plots)
theta=1
rt=1
at=0.25
K=1000
Tf=3
f<-expression(x*(1-(x/K))^theta*rt)
g<-expression(x*(1-(x/K))^theta*at)
res <- snssde1d(drift=f,diffusion=g,M=2,x0=150,N=500,t0=0, T=Tf)
windows()
tmp1<-anim.plot(time(res),res$X[,1], speed = 500, type="l", col="red", window=1:t, xlim=c(0,Tf), ylim=c(0,K))
tmp2<-anim.plot(time(res),res$X[,2], speed = 500, type="l", col="red", window=1:t, xlim=c(0,Tf), ylim=c(0,K))
myplot<-merge(tmp1,tmp2)
replay(myplot)
我也尝试在Shiny中实现它。我试过这种方式
library(shiny)
ui<-fluidPage(
sliderInput(inputId = "time", label="Time:",
min=0.01, max=10, value=0, step=0.05, animate = animationOptions(50)),
plotOutput("animation")
)
server<-function(input, output, session)
{
res<-reactive({
f<-as.expression(bquote(x*(1-(x/1000))^2*0.5))
g<-as.expression(bquote(x*(1-(x/1000))^2*0.5))
snssde1d(drift=f,diffusion=g, M=5, x0=100, T=input$time, N=1000)
})
output$animation<-renderPlot({
plot(res(), plot.type="single",col="lightgrey", xlim=c(0,10), ylim=c(0,1000))
lines(time(res()),mean(res()), col="red")
})
}
shinyApp(ui=ui, server=server)
我的问题是,每一步,我的程序都会生成一条新路径。如何修改代码以便为初始路径设置动画?