使用R实现一个简单的连续系统模拟

浏览: 1245

连续系统就是指状态随着时间连续变化的系统。我们通过计算机模拟对连续系统得到的结果只是近似的,但如果只要这种近似达到了一定的精度,也就可以满足要求。
连续系统模拟的一般方法就是首先建立系统的连续模型,然后转换为一个离散模型,并对该模型进行模拟。下面是一个追逐问题。
            在一个正方形ABCD的4个顶点处各站一个人。在某一个时刻,4个人同时出发,均以匀速v走向顺时针的下一个人,假设他们每一个人的方向始终保持对准对方,则最终将按螺旋状曲线汇合在中心点O,试求出来这种情况下每个人的行走轨迹。

对于这个问题,我们可以建立一个平面坐标系,以时间间隔为 image.png进行采样,在每一个时刻t 计算每个人在下一个时间t+image.png时的坐标。假设甲追赶乙,甲的坐标为image.png,乙的坐标为image.png,那么甲在t+image.png   的坐标为image.png,其中

   image.png

如果我们选取足够小的  image.png,模拟到甲乙的距离小于vimage.png   为止。我们假设正方形ABCD的四个顶点分别为A(0,1),B(1,1),C(1,0),D(0,0)。R语言代码如下

plot(c(0,1,1,0),c(1,1,0,0),cex=1.5,pch=19,col=1:4,xlab=" ",ylab=" ")#画出四个点  
#cex控制圆点的大小  
text(0,1,labels="A",adj=c(0.5,1.3))  
text(1,1,labels="B",adj=c(1.5,0.5))  
text(1,0,labels="C",adj=c(0.3,-0.8))  
text(0,0,labels="D",adj=c(-0.5,0.1))  
#绘制中心点  
points(0.5,0.5,pch=21,cex=1.2)  
text(0.5,0.5,,labels="O",adj=c(-1.0,0.3))  
#计算出来的个点位置存入矩阵X,y中  
delta_t<-0.01;  
n<-220  
x<-matrix(0,nrow=5,ncol=n);  
x[,1]<-c(0,1,1,0,0)  
y<-matrix(0,nrow=5,ncol=n);  
y[,1]<-c(1,1,0,0,1)  
d<-c(0,0,0,0)  
for(j in 1:(n-1))  
   {  
    for(i in 1:4)  
       {  
          d[i]<-sqrt((x[i+1,j]-x[i,j])^2+(y[i+1,j]-y[i,j])^2)  
            x[i,j+1]<-x[i,j]+delta_t*(x[i+1,j]-x[i,j])/d[i]  
            y[i,j+1]<-y[i,j]+delta_t*(y[i+1,j]-y[i,j])/d[i]  
       }  
  #x[5,j+i]=x[1,j+1],y[5,j+1]=y[1,j+i]  
    x[5,j+1]<-x[1,j+1];  
    y[5,j+1]<-y[1,j+1];  
    }  
#画出相应的曲线  
for(i in 1:4)  
    lines(x[i,],y[i,],lwd=2,col=i+1)  

轨迹图如下:

image.png

在plot()函数中的一些参数代表的意义如下:

pch  指定用于绘制散点的符号。绘制的点往往略高于或低于指定的坐标位置,仅pch=“.”无这个问题。
lty   指定画线用的线型。缺省值lty=1是实线。从2开始是各种虚线。
lwd   指定线粗细,以标准线粗细为单位。这个参数影响数据曲线的线宽以及坐标轴的线宽。
col   指定颜色,可应用于绘点、线、文本、填充区域、图象。颜色值也可以用象”red”,”blue” 这样的颜色名指定。
font   用来指定字体的整数。一般font=1是正体,2是 黑体,3是 斜体,4是 黑斜体。
font.axisfont.labfont.mainfont.sub  分别用来指定坐标刻度、坐标轴标签、标题、小标题所用的字体。
adj  指定文本相对于给定坐标的对齐方式。取0表示左对齐,取1表示右对齐,取0.5表示居中。此参数的值实际代表的是出现在给             定坐标左边的文本的比例,比如adj=-0.1的效果是文本出现在给定坐标位置的右边并空出相当于文本10%长度的距离。
cex 指定字符放大倍数。

推荐 3
本文由 王亨 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册