元胞自动机NaSch模型及其MATLAB代码
- 格式:docx
- 大小:807.17 KB
- 文档页数:8
%function NaSch02()N=2000;vmax=5;timestep=500;ss=1;averagev=zeros();flow=zeros();avcardis=zeros();%000平均车间距avrv=zeros();%000平均相对速度avFF=zeros();%平均车辆作用力for rho=0.05:0.05:1%车辆密度cells=rand(1,N)<rho;carposition=find(cells);%车辆位置初始化carn=length(carposition);carv=round(vmax*rand(1,carn));%速度初始化cardis=zeros(1,carn);rv=zeros(1,carn);%记录车辆先对速度DMIN=4;D=40;FMAX=100;%F=zeros(1,carn);M=2;%..........................................%车间距、相对速度、作用力初始化for mm=1:carn-1cardis(mm)=carposition(mm+1)-carposition(mm)-1;rv(mm)=carv(mm+1)-carv(mm);%rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr if DMIN<cardis(mm)<DF(mm)=M*rv(mm)^2/cardis(mm);%..........................elseif cardis(mm)>Drv(mm)=0;F(mm)=0;elserv(mm)=0;F(mm)=FMAX;endend%..........................endmm=mm+1;cardis(mm)=N+carposition(1)-carposition(mm)-1;rv(mm)=carv(1)-carv(mm);%rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr rrrrrrrif DMIN<cardis(mm)<DF(mm)=M*rv(mm)^2/cardis(mm);%..........................elseif cardis(mm)>Drv(mm)=0;F(mm)=0;elserv(mm)=0;F(mm)=FMAX;endend%................................%车间距、相对速度、作用力初始化完成memor_cells=zeros(timestep,N);memor_cellv=zeros(timestep,N);memor_F=zeros(timestep,N);%............................memor_cardis=zeros(timestep,N);%000memor_rv=zeros(timestep,N);%000sumv=0;pmin=0.1;pmax=0.3; flag=0;%sumcardis=0;%00000000sumrv=0;%000for jj=1:timestep%开始更新for ii=1:carnif rv(ii)>=0flag=1;elseflag=0;endcarv(ii)=min(carv(ii)+1,vmax);%加速更新carv(ii)=min(carv(ii),cardis(ii));%减速if flag==1;pslow=pmin;elsepslow=pmax;endif rand(1)<pslowcarv(ii)=max(carv(ii)-1,0);%随机慢化endif (jj>100)sumv=sumv+carv(ii);%vvvvvvvvvvvvvvvvvvvvvvvvvvvv速度求和end%carpositon变化newposition=carposition(ii)+carv(ii);if newposition<=Ncarposition(ii)=newposition;elsecarposition(ii)=newposition-N;endmemor_cells(jj,carposition(ii))=1;end%速度位置更新完,进行车间距、相对速度的更新for mm=1:carn-1if carposition(mm)<carposition(mm+1)cardis(mm)=carposition(mm+1)-carposition(mm)-1;if cardis(mm)<vmax%rv(mm)=carv(mm+1)-carv(mm);%rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrelse%rv(mm)=0;end%if cardis(mm)>D||cardis(mm)<DMINrv(mm)=0;end%F(mm)=M*rv(mm)^2/cardis(mm);%。
元胞自动机 matlab元胞自动机是一种计算模型,可以用于模拟和研究复杂系统的行为。
它是由一组相同的元胞组成的,每个元胞都有自己的状态和规则。
通过在每个时间步骤中更新元胞的状态,可以模拟出整个系统的演化过程。
在Matlab中,元胞自动机可以通过创建一个二维数组来实现。
数组的每个元素代表一个元胞,而数组的维度则表示整个系统的空间结构。
初始时,可以随机或根据特定的规则给每个元胞赋予一个初始状态。
然后,通过迭代更新每个元胞的状态,可以观察到整个系统的演化过程。
元胞自动机的一个经典例子是康威生命游戏(Conway's Game of Life)。
在这个游戏中,每个元胞的状态只有两种:存活或死亡。
根据一定的规则,每个元胞的下一个状态将取决于其周围的邻居元胞的状态。
通过设置不同的初始状态和规则,可以模拟出各种有趣的图案和现象,如稳定的结构、周期性的振荡和混沌的演化。
除了康威生命游戏,元胞自动机还可以应用于许多其他领域。
例如,在生物学中,可以使用元胞自动机模拟细胞生长、细菌传播和免疫系统的行为。
在社会科学中,可以使用元胞自动机模拟人群的行为和决策过程。
在物理学中,可以使用元胞自动机模拟粒子系统的动力学行为。
在编写Matlab程序时,可以使用循环结构来实现元胞自动机的迭代更新过程。
通过遍历数组中的每个元胞,并根据其周围的邻居元胞的状态来更新其自身的状态,可以实现整个系统的演化。
可以使用条件语句来定义元胞的更新规则,并根据需要进行调整和修改。
除了基本的元胞自动机模型,Matlab还提供了许多扩展和优化的工具和函数。
例如,可以使用内置的函数来计算元胞自动机系统的统计特性,如平均密度、熵和相变点。
还可以使用图形界面工具来可视化元胞自动机模拟的结果,并进行交互式的实时调整和观察。
元胞自动机是一种强大的计算模型,可以用于模拟和研究复杂系统的行为。
在Matlab中,可以使用二维数组和循环结构来实现元胞自动机的模拟和演化过程。
一、介绍元胞自动机及其在沙堆模拟中的应用元胞自动机(Cellular Automaton)是一种由一些简单的规则控制的离散计算模型。
它由一个二维或三维的规则阵列、一组在这个阵列上移动的“元胞”以及一组确定元胞状态变化的规则组成。
元胞自动机最早由数学家约翰·冯·诺伊曼提出,后来由斯蒂芬·沃尔夫勒姆等人进行了大量的研究和应用。
在沙堆模拟中,元胞自动机可以用来模拟沙堆的堆积和坍塌过程。
沙堆模型是一个简单而又重要的研究对象,在物理学和复杂系统中有着广泛的应用。
通过元胞自动机模拟沙堆的行为,可以观察到沙堆中颗粒的运动规律、堆积形态和临界状态等重要现象。
二、沙堆模型的基本原理沙堆模型的基本原理是将一定数量的颗粒投放到一个局部平坦的表面上,通过不断的增加颗粒数目,观察颗粒的堆积和坍塌过程。
在这个过程中,一些稳定的结构和现象会逐渐显现出来。
通过模拟沙堆的行为,可以研究出现这些结构和现象的规律,并且揭示出复杂系统中的一些普遍规律。
三、元胞自动机沙堆模拟的基本原理元胞自动机沙堆模拟的基本原理是将沙堆表面分割成一个个的格子,每个格子就是一个元胞。
在元胞自动机模拟中,每个元胞有一个状态变量表示其高度,而且每个元胞的状态都受到相邻元胞状态的影响。
通过设定适当的规则,可以模拟出沙堆颗粒的堆积和坍塌过程。
四、元胞自动机沙堆模拟的matlab代码```matlab创建一个10x10的元胞数组cells = zeros(10,10);设置沙堆初始高度为5cells(5,5) = 5;模拟沙堆的坍塌过程for i = 1:100遍历每个元胞for x = 1:10for y = 1:10如果当前元胞高度大于3,则进行坍塌if cells(x,y) > 3当前元胞高度减4cells(x,y) = cells(x,y) - 4;上方元胞高度加1if x > 1cells(x-1,y) = cells(x-1,y) + 1;end下方元胞高度加1if x < 10cells(x+1,y) = cells(x+1,y) + 1;end左方元胞高度加1if y > 1cells(x,y-1) = cells(x,y-1) + 1;end右方元胞高度加1if y < 10cells(x,y+1) = cells(x,y+1) + 1;endendendendend输出模拟结果cells```以上是一个简单的用matlab实现的元胞自动机沙堆模拟代码。
精品文档供您编辑修改使用专业品质权威编制人:______________审核人:______________审批人:______________编制单位:____________编制时间:____________序言下载提示:该文档是本团队精心编制而成,希望大家下载或复制使用后,能够解决实际问题。
文档全文可编辑,以便您下载后可定制修改,请根据实际需要进行调整和使用,谢谢!同时,本团队为大家提供各种类型的经典资料,如办公资料、职场资料、生活资料、学习资料、课堂资料、阅读资料、知识资料、党建资料、教育资料、其他资料等等,想学习、参考、使用不同格式和写法的资料,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!And, this store provides various types of classic materials for everyone, such as office materials, workplace materials, lifestylematerials, learning materials, classroom materials, reading materials, knowledge materials, party building materials, educational materials, other materials, etc. If you want to learn about different data formats and writing methods, please pay attention!基于Matlab的元胞自动机的仿真设计摘要:元胞自动机(Cellular Automaton,CA)是一种基于空间离散和时间离散的模拟模型,广泛应用于各种复杂系统的建模与仿真。
元胞自动机matlab
元胞自动机(Cellular Automaton)是一种离散的数学模型,由许多简单的计算单元(称为“元胞”)组成,它们按照相同的规则在离散的空间和时间上进行演化。
在MATLAB中,你可以使用矩阵来表示元胞自动机的状态,然后编写规则来更新这些状态。
下面我将从几个方面介绍如何在MATLAB中实现元胞自动机。
首先,你可以使用MATLAB中的矩阵来表示元胞自动机的状态。
假设你有一个二维的元胞自动机,可以用一个二维的矩阵来表示。
矩阵中的每个元素可以表示一个元胞的状态,比如0表示空白,1表示存活等等。
你可以使用MATLAB的矩阵操作来初始化和更新这些状态。
其次,你需要编写规则来更新元胞的状态。
这些规则可以根据元胞的邻居状态来确定元胞下一个时刻的状态。
在MATLAB中,你可以使用循环和条件语句来实现这些规则。
例如,你可以遍历矩阵中的每个元素,然后根据它周围元胞的状态来更新它的状态。
另外,MATLAB还提供了一些内置的函数和工具箱,可以帮助你实现元胞自动机模型。
比如,MATLAB的CellularAutomata工具箱
提供了一些函数来简化元胞自动机模型的实现。
你可以使用这些函数来快速地创建和演化元胞自动机模型。
总之,在MATLAB中实现元胞自动机模型需要你熟练掌握矩阵操作、循环和条件语句等基本编程技巧,同时也需要对元胞自动机的原理有一定的了解。
希望这些信息能够帮助你在MATLAB中实现元胞自动机模型。
基于元胞自动机模拟带收费站和红绿灯的交通问题matlab源码基于元胞自动机模拟带收费站和红绿灯的交通问题,是交通仿真领域的一项研究。
这项技术可以帮助交通规划者预测交通问题的发生,并为改善交通流提供数据支持。
MATLAB是一款强大的数值计算软件,可以用来实现这个问题的仿真过程。
下面将分步骤阐述如何实现这个交通问题的元胞自动机仿真。
1.建立环境首先我们需要在MATLAB中建立仿真环境,包括定义道路网格、交通流量和车辆类型等。
在此基础上,我们可以设定道路的长度和宽度、车流量、车辆速度等参数,构建仿真模型。
这些参数的设定对仿真结果的准确性和效率都有较大影响。
2.模拟红绿灯控制在交通流模型中,红绿灯控制是最关键的问题之一。
我们需要设定红绿灯时序和控制方式,用元胞自动机“告诉”仿真环境哪些车辆可以通行、哪些车辆需要停车等。
3.实现收费站功能收费站是现代城市交通网络中一个非常重要的环节。
在仿真中,我们可以通过定义特定的元胞状态,用元胞自动机实现收费站的功能。
根据收费站的类型不同,我们可以定义不同的元胞状态和处理流程。
4.仿真流程优化模拟仿真的流程对最后的结果影响很大。
我们需要根据仿真实验的目标、节点、数据等内容对仿真流程进行优化,提升仿真效率、降低误差率。
5.仿真结果分析仿真结束后,我们需要对仿真结果进行分析,包括交通流量分布、车辆延误情况、交通拥堵等细节。
通过分析这些数据,我们可以了解交通流中的瓶颈和问题,提出相应的改进方案。
总之,利用MATLAB和元胞自动机技术可以很好地模拟带收费站和红绿灯的交通问题,为交通规划和改进提供有力的支持。
对于交通问题的研究者和交通规划人员,这项技术都有很大的研究与应用前景。
自动驾驶技术是近年来备受关注的领域,其应用不仅可以提高交通效率,还可以提高行车安全性。
而在自动驾驶技术中,matlab元胞自动机代码是一种常用的建模和仿真工具,可以帮助工程师们设计和测试自动驾驶系统。
下面将介绍如何使用matlab元胞自动机代码来实现自动驾驶专用车道的模拟。
文章内容将按照以下主题展开:一、自动驾驶专用车道的概念及意义1.1 自动驾驶专用车道的定义1.2 自动驾驶专用车道的意义和作用二、matlab元胞自动机代码的基本原理2.1 元胞自动机的定义和特点2.2 matlab中的元胞自动机代码实现三、自动驾驶专用车道的matlab元胞自动机代码设计3.1 自动驾驶车辆的行为建模3.2 车道交通流模拟3.3 交通规则和控制策略四、matlab元胞自动机代码实现实例4.1 代码框架和基本结构4.2 参数设置和模型验证4.3 模拟结果分析五、自动驾驶专用车道的未来发展方向5.1 自动驾驶技术的趋势5.2 自动驾驶专用车道的未来发展方向通过以上几个主题的介绍,读者可以全面了解自动驾驶专用车道的概念、matlab元胞自动机代码的基本原理和代码实现方法,以及自动驾驶技术的未来发展方向。
希望本文的内容对读者对自动驾驶技术有所帮助,也能引发更多对于自动驾驶专用车道以及matlab元胞自动机代码的讨论和研究。
六、自动驾驶专用车道的概念及意义1.1 自动驾驶专用车道的定义自动驾驶专用车道是为自动驾驶车辆专门设置的通行道路,旨在为自动驾驶车辆提供更加高效、安全的行驶环境。
这些道路通常采用先进的交通管理系统和智能交通设施,以便自动驾驶车辆能够更好地感知和适应道路环境。
自动驾驶专用车道旨在降低交通拥堵、提高交通运输效率,并且可以为用户带来更舒适的出行体验。
1.2 自动驾驶专用车道的意义和作用自动驾驶专用车道的建设与发展对于推动自动驾驶技术的应用具有重要意义。
自动驾驶专用车道可以有效地促进自动驾驶车辆在道路上行驶的安全性与稳定性。
元胞自动机是一种模拟复杂系统行为的数学工具,在许多领域都有着广泛的应用。
其中,元胞自动机在博弈论中的应用尤为突出。
通过使用元胞自动机模拟博弈过程,可以更好地理解博弈过程中的策略选择、稳定状态和行为演变。
而Matlab作为一种强大的科学计算软件,被广泛应用于元胞自动机模型的实现和分析中。
1. 元胞自动机的概念元胞自动机(Cellular Automaton, CA)是一种离散空间、离散时间的动力学系统模型。
它由一系列离散的元胞组成,每个元胞可以处于有限个状态中的一个。
元胞之间相互作用,通过一组规则确定元胞状态的演化,从而产生全局性的动力学行为。
元胞自动机可以模拟许多自然现象和社会行为,例如传染病传播、交通流动、城市规划等。
2. 博弈论与元胞自动机的结合博弈论是研究决策者间相互作用和竞争的数学理论。
博弈论的应用领域非常广泛,包括经济学、社会学、生物学等。
在博弈论中,元胞自动机可以很好地模拟多个参与者之间的策略选择和博弈结果。
通过元胞自动机模拟博弈过程,可以研究参与者策略演化的动力学行为,探究稳定策略的产生和博弈结果的变化。
3. Matlab在元胞自动机模拟中的应用Matlab是一种强大的科学计算软件,具有丰富的工具箱和编程功能,特别适合于复杂系统的建模和仿真。
在元胞自动机模拟中,Matlab提供了丰富的函数和工具,可以方便地实现元胞自动机的规则定义、初始状态设定、演化规则的编写和模拟结果的可视化。
Matlab还支持并行计算和高性能计算,可以加速大规模元胞自动机模拟的运算过程。
4. 元胞自动机博弈模型的实现步骤基于Matlab实现元胞自动机博弈模型可以分为以下步骤:4.1 初始状态设定:确定元胞自动机的初始状态,包括元胞的空间结构和初始状态值。
4.2 演化规则定义:制定元胞自动机的演化规则,包括元胞状态更新的条件和方式。
4.3 演化过程模拟:利用Matlab进行元胞自动机的演化过程模拟,计算每个时刻元胞的状态。
元胞自动机matlab代码细胞自动机,也称作细胞状态模型,是一种描述系统的动态行为的模型。
它具有一种元胞状态,涉及到一组计算机运算,可以用来模拟系统的复杂行为。
Matlab实现此模型首先要了解以下重要步骤:(1)设定空间参数和规则:定义空间网格(如1x1网格),以及每个网格中单元细胞的状态变化(如活动/不活动)。
(2)初始状态:给定空间网格内的各个单元细胞的初始状态,可以设定为活动或不活动。
(3)迭代:计算每个空间网格上单元细胞的新状态,根据指定的规则和网格上其他单元细胞的当前状态。
(4)展示图形:展示计算出的单元细胞和网格状态,使用不同颜色来区分不同状态。
%初始化space_x = 1; %定义空间域单元的x坐标space_y = 1; %定义空间域单元的y坐标space = zeros(space_x,space_y); %定义模型空间,x行,y列,数值全置0%设定初始状态space(1,1)=1; %定义空间[1,1]单元状态为1,活动;定义空间[1,1]单元状态为0,不活动%迭代,计算当前单元状态for x = 1:space_xfor y = 1:space_y%计算伴随单元的状态值s = 0; %活动周围的单元状态值%周围单元的状态值s = s+space(x-1,y)+space(x+1,y)+space(x,y-1)+space(x,y+1);%计算当前单元状态if s == 2 %周围单元的状态值为2时,当前单元保持不变 space(x,y) = space(x,y);endif s == 3 %周围单元的状态值为3时,当前单元活动space(x,y) = 1;endendend%展示图形pcolor(space); %展示模型空间axis([0 space_x 0 space_y]);%设定X和Y轴坐标colormap([1 0 0;0 1 0]);%设定模型空间中活动单元的颜色。
元胞自动机N a S c h模型及其M A T L A B代码 This manuscript was revised by the office on December 22, 2012元胞自动机N a S c h模型及其M A T L A B代码作业要求根据前面的介绍,对NaSch模型编程并进行数值模拟:模型参数取值:Lroad=1000,p=0.3,Vmax=5。
边界条件:周期性边界。
数据统计:扔掉前50000个时间步,对后50000个时间步进行统计,需给出的结果。
基本图(流量-密度关系):需整个密度范围内的。
时空图(横坐标为空间,纵坐标为时间,密度和文献中时空图保持一致,画500个时间步即可)。
指出NaSch模型的创新之处,找出NaSch模型的不足,并给出自己的改进思路。
流量计算方法:密度=车辆数/路长;流量flux=density×V_ave。
在道路的某处设置虚拟探测计算统计时间T内通过的车辆数N;流量flux=N/T。
在计算过程中可都使用无量纲的变量。
1、NaSch模型的介绍作为对184号规则的推广,Nagel和Schreckberg在1992年提出了一个模拟车辆交通的元胞自动机模型,即NaSch模型(也有人称它为NaSch模型)。
时间、空间和车辆速度都被整数离散化。
道路被划分为等距离的离散的格子,即元胞。
每个元胞或者是空的,或者被一辆车所占据。
车辆的速度可以在(0~Vmax)之间取值。
2、NaSch模型运行规则在时刻t到时刻t+1的过程中按照下面的规则进行更新:(1)加速:vnmin(vn1,vmax)规则(1)反映了司机倾向于以尽可能大的速度行驶的特点。
(2)减速:vnmin(vn,dn)规则(2)确保车辆不会与前车发生碰撞。
(3)随机慢化:以随机概率p进行慢化,令:vnmin(vn-1,0)规则(3)引入随机慢化来体现驾驶员的行为差异,这样既可以反映随机加速行为,又可以反映减速过程中的过度反应行为。
这一规则也是堵塞自发产生的至关重要因素。
(4)位置更新:vnxnvn,车辆按照更新后的速度向前运动。
其中vn,xn分别表示第n辆车位置和速度;l(l≥1)为车辆长度;p表示随机慢化概率;dnxn1xn1表示n车和前车n+1之间空的元胞数;vmax为最大速度。
3、NaSch模型实例根据题目要求,模型参数取值:L=1000,p=0.3,Vmax=5,用matlab软件进行编程,扔掉前11000个时间步,统计了之后500个时间步数据,得到如下基本图和时空图。
3.1程序简介初始化:在路段上,随机分配200个车辆,且随机速度为1-5之间。
图图3.1.1NaSch模型运行图图3.1.2NaSch模型3.2流量密度分析图3.2描述了交通流量与密度的关系,从图中可知,该模型中,当密度为0——0.185时,流量随密度的增加而增加;当密度超过0.185时,流量开始随密度的增加而下降。
图3.2基于NaSch模型的流量密度图3.3NaSch模型时空图分析图图NaSch模型的时空图图NaSch模型的时空图4模型评价优点:该程序基本实现了NaSch模型的基本功能,并且最大速度、元胞数量、车辆数量以及运行间隔时间都可以修改,程序很灵活,并且可以清晰的看出每一次运行过程。
缺点:当时间步超过20000步时,内存占用量大。
附件%主程序:NaSch_3.m程序代码%单车道最大速度3个元胞开口边界条件加速减速随机慢化clfclearall%buildtheGUI%definetheplotbuttonplotbutton=uicontrol('style','pushbutton',...'string','Run',...'fontsize',12,...'position',[100,400,50,20],...'callback','run=1;');%definethestopbuttonerasebutton=uicontrol('style','pushbutton',...'string','Stop',...'fontsize',12,...'position',[100,500,50,20],...'callback','freeze=1;');%definetheQuitbuttonquitbutton=uicontrol('style','pushbutton',...'string','Quit',...'fontsize',12,...'position',[100,600,50,20],...'callback','stop=1;close;');number=uicontrol('style','text',...'string','1',...'fontsize',12,...'position',[20,400,50,20]);%CAsetupn=1000;%数据初始化z=zeros(1,n);%元胞个数z=roadstart(z,200);%道路状态初始化,路段上随机分布200辆cells=z;vmax=5;%最大速度v=speedstart(cells,vmax);%速度初始化x=1;%记录速度和车辆位置memor_cells=zeros(3600,n);memor_v=zeros(3600,n);imh=imshow(cells);%初始化图像白色有车,黑色空元胞set(imh,'erasemode','none')axisequalaxistightstop=0;%waitforaquitbuttonpushrun=0;%waitforadrawfreeze=0;%waitforafreeze(冻结)while(stop==0&x<11502)if(run==1)%边界条件处理,搜素首末车,控制进出,使用开口条件a=searchleadcar(cells);b=searchlastcar(cells);[cells,v]=border_control(cells,a,b,v,vmax);i=searchleadcar(cells);%搜索首车位置forj=1:iifi-j+1==n[z,v]=leadcarupdate(z,v);continue;else%======================================加速、减速、随机慢化ifcells(i-j+1)==0;%判断当前位置是否非空continue;elsev(i-j+1)=min(v(i-j+1)+1,vmax);%加速%=================================减速k=searchfrontcar((i-j+1),cells);%搜素前方首个非空元胞位置ifk==0;%确定于前车之间的元胞数d=n-(i-j+1);elsed=k-(i-j+1)-1;endv(i-j+1)=min(v(i-j+1),d);%==============================%减速%随机慢化v(i-j+1)=randslow(v(i-j+1));new_v=v(i-j+1);%======================================加速、减速、随机慢化%更新车辆位置z(i-j+1)=0;z(i-j+1+new_v)=1;%更新速度v(i-j+1)=0;v(i-j+1+new_v)=new_v;endendendcells=z;memor_cells(x,:)=cells;%记录速度和车辆位置memor_v(x,:)=v;x=x+1;set(imh,'cdata',cells)%更新图像%updatethestepnumberdisplaypause(0.0001);stepnumber=1+str2num(get(number,'string'));set(number,'string',num2str(stepnumber))endif(freeze==1)run=0;freeze=0;enddrawnowendfigure(1)forl=11001:1:11500fork=1:1:1000ifmemor_cells(l,k)>0plot(k,l,'k.');holdon;endendendxlabel('空间位置')ylabel('时间(s)')title('时空图')fori=1:1:500density(i)=sum(memor_cells(i,:)>0)/1000;flow(i)=sum(memor_v(i,:))/1000;endfigure(2)plot(density,flow,'k.');title('流量密度图')xlabel('density')ylabel('flow')%%//////////////////////////////////////////////////////////////////// ///%%%函数:searchlastcar.m程序代码function[location_lastcar]=searchlastcar(matrix_cells)%搜索尾车位置fori=1:length(matrix_cells)ifmatrix_cells(i)~=0location_lastcar=i;break;else%如果路上无车,则空元胞数设定为道路长度location_lastcar=length(matrix_cells);endend%函数:searchfrontcar.m程序代码function[location_frontcar]=searchfrontcar(current_location,matrix_ce lls)i=length(matrix_cells);ifcurrent_location==ilocation_frontcar=0;elseforj=current_location+1:iifmatrix_cells(j)~=0location_frontcar=j;break;elselocation_frontcar=0;endendend%函数:roadstart.m程序代码function[matrix_cells_start]=roadstart(matrix_cells,n)%道路上的车辆初始化状态,元胞矩阵随机为0或1,matrix_cells初始矩阵,n初始车辆数k=length(matrix_cells);z=round(k*rand(1,n));fori=1:nj=z(i);ifj==0matrix_cells(j)=0;elsematrix_cells(j)=1;endendmatrix_cells_start=matrix_cells;%函数:randslow.m程序代码function[new_v]=randslow(v)p=0.3;%慢化概率rand('state',sum(100*clock)*rand(1));%¨ú×p_rand=rand;%产生随机概率ifp_rand<=pv=max(v-1,0);endnew_v=v;%函数:leadcarrupdate.m程序代码function[new_matrix_cells,new_=leadcarupdate(matrix_cells,v)%第一辆车更新规则n=length(matrix_cells);ifv(n)~=0matrix_cells(n)=0;v(n)=0;endnew_matrix_cells=matrix_cells;new_v=v;%函数:searchleadcar.m程序代码function[location_leadcar]=searchleadcar(matrix_cells)i=length(matrix _cells);forj=1:iifmatrix_cells(i-j+1)~=0location_leadcar=i-j+1;break;elselocation_leadcar=0;endend%函数:speadstart.m程序代码function[v_matixcells]=speedstart(matrix_cells,vmax)%道路初始状态车辆速度初始化v_matixcells=zeros(1,length(matrix_cells)); fori=1:length(matrix_cells)ifmatrix_cells(i)~=0v_matixcells(i)=round(vmax*rand(1));endend。