基于元胞自动机的扩散模拟方法

文档序号:9489548阅读:824来源:国知局
基于元胞自动机的扩散模拟方法
【技术领域】
[0001] 本发明涉及扩散现象的二维动态模拟,尤其涉及基于元胞自动机的扩散模拟方 法。
【背景技术】
[0002] 扩散指物质、动量、能量或信息等随着时间的迀移从一个区域向其他区域转移、传 播的现象,如污染物在大气、水体、土壤等介质中的扩散。扩散现象是一个时空动态变化的 复杂过程,其复杂性体现为扩散过程受扩散物质、扩散介质、扩散条件以及区域环境等各因 素综合影响,具有随机性、动态性、非线性、涌现性、演化性等复杂特性,因此,很难用传统的 宏观模型对其进行有效的实时动态模拟。目前采用的模拟方法大多数是基于其统计特性确 定过程的控制方程组,再采用数值计算方法求解方程组,该方法的弊端是准确度不高、适应 性不强、模型结构及计算复杂,同时很难实现真正意义上的实时动态模拟。

【发明内容】

[0003] 本发明的目的在于针对现有技术中的上述缺陷,提供一种基于元胞自动机的扩散 模拟方法,该方法通过元胞与其邻域之间的局部动态规则来涌现整个空间的宏观现象,能 够更好地模拟研究对象的复杂运动过程。
[0004] 为实现上述发明目的,本发明采用了如下技术方案,一种基于元胞自动机的扩散 模拟方法,按如下步骤进行:
[0005] 步骤一,二维元胞自动机的构造:
[0006] 在MATLAB软件中定义二维矩阵作为元胞空间,矩阵的每个元素代表一个元胞,其 相邻的8个元素代表元胞邻居,元素值为元胞状态。通过构造位移矩阵后采用矩阵差分的 形式并行计算状态转移函数,实现所有元胞状态的快速更新。上述构造通过设计相应的参 数并由GUI建模与仿真平台输入MATLAB程序实现,设置元胞基本参数:
[0007] cellspacelengthcolumns:设置元胞空间的长(矩阵列数);
[0008] cellspacewidthrows:设置元胞空间的宽(矩阵行数);
[0009] seedpositionrow:设置扩散源位置对应于元胞空间的行数;
[0010] seedpositioncolumn:设置扩散源位置对应于元胞空间的列数;
[0011] seedsize:设置扩散源的大小;
[0012]seeddensity:设置扩散源的强度;
[0013] emergencydiffusion:定义瞬时一次性释放扩散方式;
[0014] continuousdiffusion:定义持续性多次释放扩散方式,并设置持续排放次数;
[0015]MultiCASeed:添加多个扩散源,分别设置扩散源所在位置的行(row)和列 (column);
[0016] 如果是非点源,贝丨】在non-pointsourceparameters:设置非点源的基本参数;
[0017]importanon-pointsourcepicture:导入包含非点源所在区域的图片;
[0018] definenon-pointsource:定义非点源区域基本参数。
[0019] 步骤二,扩散模式的运行机制构造:
[0020] 通过提供扩散源、扩散方式和扩散系数的设置组合来模拟各种不同模式的扩散过 程。扩散源即为元胞自动机中的种子元胞,通过对二维矩阵中对应元素赋值的操作,可设置 一个或多个扩散源的位置、形状、大小、强度。扩散方式有两种:瞬时一次性释放后的扩散 (emergency_diffusion)和持续性多次释放后的扩散(continuous_diffusion),通过编写 定时器的回调函数来实现其操作。扩散系数即为元胞状态向其8个邻居方向进行扩散的比 率,设计相应的参数输入控件来进行设置,通过其设置可实现恒定方向,非恒定方向或不确 定方向的扩散。基本扩散参数的设置:
[0021] up:设置向上的扩散系数;
[0022] down:设置向下的扩散系数;
[0023]left:设置向左的扩散系数;
[0024] right:设置向右的扩散系数;
[0025]upleft:设置向左上角的扩散系数;
[0026] upright:设置向右上角的扩散系数;
[0027] downleft:设置向左下角的扩散系数;
[0028] downright:设置向右下角的扩散系数;
[0029] 如果存在湍流,则设置湍流扩散参数;
[0030] addturbulent:添加端流模式;
[0031] turbulentarea:单击后设置端流大小和位置;
[0032] topleftpositionrow:设置端流区域左上角顶点所在位置对应的行数;
[0033]topleftpositioncolumn:设置端流区域左上角顶点所在位置对应的列数;
[0034]length(columns):设置端流区域的长度(列数);
[0035]width(rows):设置端流区域的宽度(行数);
[0036]importpattern:导入端流扩散系数矩阵。
[0037] 扩散次数以及间隔时间设置:
[0038]executingtimes:设置扩散运行的次数;
[0039]repeatinterval:设置相邻两次扩散的时间间隔,单位为:秒。
[0040] 步骤三,扩散模拟的实时动态控制机制:
[0041] 利用MATLAB提供的定时器对象,实现模拟过程的实时图形显示、开始、暂停、继 续、停止等过程控制。实现机制为:创建一个定时器实例,将元胞自动机以及扩散模式的设 置参数以及其他模拟过程中需用到的参数写入定时器的userdata,整个模拟过程中以它作 为数据交换接口。开始时,启动定时器,在其回调函数中运行设定的扩散方式并实时显示扩 散结果。如暂停,则将当前状态保存在userdata,继续时,将新设置读入后在原状态上继续 模拟。停止时,则删除该定时器实例,为下一次模拟清除内存。具体实现如下:
[0042]1.从userdata中读取扩散方式并判断,如果是瞬时一次性扩散,则执行回调函数 emergencydiffusion,如果为持续性扩散,贝执行回调函数continuousdiffusion;
[0043] 2.函数开始执行,从userdata中读取元胞扩散参数;
[0044] 3.读入元胞空间矩阵current_cellspace;
[0045] 4.构建 8 个方向的位移矩阵(spaceup,spacedown,spaceleft,spaceright, spaceupleft,spaceupright,spacedownleft,spacedownright);
[0046] 5.根据8个方向扩散系数、位移矩阵及矩阵差分构造的转移函数实现元胞状态的 并行更新:
[0047] newspace=space+(up*(spaceup-space)+down*(spacedown-space)+left* ( spaceleft-space)+right*(spaceright+(-space))+upleft*(spaceupleft-space)+up right* (spaceupright-space)+downleft* (spacedownleft-space)+downright*(space downright-space));
[0048] 6.判断是否存在湍流,如果存在,则读取湍流区域的大小及其左上角位置 (tposition)以及userdata中的端流区域扩散系数矩阵;构建端流区域的8个方向位移矩 阵(tspaceup,tspacedown,tspaceleft,tspaceright,tspaceupleft,tspaceupright, tspacedownleft,tspacedownright);然后实现端流区域元胞状态的并行更新:
[0049] tnewspace=tspace+(tup. *(tspaceup-tspace)+tdown. *(tspacedown-tspace) +tleft. * (tspaceleft-tspace)+tright. *(tspaceright-tspace)+tupleft.*(tspaceuple ft-tspace)+tupright. *(tspaceupright-tspace)+tdownleft. *(tspacedownleft-tspace )+tdownright. *(tspacedownright-tsp
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1