250 likes | 547 Views
第二篇 连续系统模拟. 4.3 系统动力学模拟语言 —DYNAMO. DYNAMO 是系统动力学的专用计算机模拟语言。 它的创始人是美国麻省理工学院的 ALexander L.Pugh 。最初版本出现于 1959 年。之后,经过不断的改进,陆续发展出了各种不同版本,它们都遵循相同的基本原理。 DYNAMO 语言的特点是面向用户,面向构模者,易学易用,经过短时期训练就能掌握。 http://dynamomd.org/index.php/news. 1 . DYNAMO 语言中的时间机制. DYNAMO 语言中的时间机制如图 4 - 14 所示。 其中: J 表示上一时刻
E N D
4.3 系统动力学模拟语言—DYNAMO • DYNAMO是系统动力学的专用计算机模拟语言。 • 它的创始人是美国麻省理工学院的ALexander L.Pugh。最初版本出现于1959年。之后,经过不断的改进,陆续发展出了各种不同版本,它们都遵循相同的基本原理。 • DYNAMO语言的特点是面向用户,面向构模者,易学易用,经过短时期训练就能掌握。 • http://dynamomd.org/index.php/news
1.DYNAMO语言中的时间机制 DYNAMO语言中的时间机制如图4-14所示。 其中: J表示上一时刻 K表示当前时刻 L表示下一时刻 DT为一个确定的时间间隔,称为步长。 依次规定可以得到两个长度相等的时间间隔JK和KL。
DYNAMO语言中的时间机制 2 • 按照时间机制的规定,还可以得出以下关系式。 J= K - DT L=K + DT • 在以后变量命名中,要用到时间标志。时间标志可分为双标志和单标志两种形式。 • 双标志只有两个,它们是.JK和.KL,分别表示那两个不同的时间间隔。 • 单标志也只有两个,它们是.J和.K,分别表示那两个不同的时刻。
2.基本规定 • (1)变量名:变量名由不超过6个的字母或数字组成,其中第一字符必须为字母。命名的基本原则是使读者容易识别变量的含义。 • (2)代数运算符 代数运算符要表示最基本的四则运算。 + - * / 另外,乘法也可用 (变量名)(变量名)的形式表示并实现。
2.基本规定 2 • (3)语句 首先要掌握DYNAMO的语句。 DYNAMO语句的一般格式为: 标识符 语句体 其中在标识符和语句体之间至少要有一个空格。
DYNAMO语句 方程语句 • L 方程语句 • R 方程语句 • A 方程语句 • C 给常数赋值 • N 计算初始值 • T 赋值于表函数中Y坐标 控制语句 SPEC SAVE 其它语句 注释语句 * 模型第一行 NOTE × 换行符
(4)方程语句中的变量表示 • 对于状态变量和辅助变量,需要取并且只能取单标志。 例如, LEV.J INV.K NOHS.K • 对于决策变量,需要取并且只能取双标志。例如, IN.JK OUT.KL • 常数无时间标志。 例如, FDL
3.方程语句 (1)状态方程(即L方程) 状态方程为DYNAMO语言的主要方程之一。它具有标准格式。例如, L︼ ︼ ︼ ︼ ︼ HOUSE.K=HOUSE.J+DT*RH.JK (五或六格空格) L POP.K=POP.J+(DT)(IN.JK-OUT.JK) 上式也可写成为, L POP.K=POP.J+DT*IN.JK-DT*OUT.JK 以上例子中,L为状态方程的标识符。
(1)状态方程 2 • 状态方程最直接含义为计算K时刻的状态变量值。 • 见图示DYNAMO语言中的时间推进机制
(2) 速率方程(即R方程) 速率方程的实例为, R RB.KL=POP.K*FB 对速率方程要注意以下说明, ① 速率方程无标准格式,它按照构模思路建立。其形式与模型结构,尤其是反馈回路的结构有密切关系。 速率方程的建立是系统动力学构模的重点和难点之一。
(2) 速率方程 2 ②在步长DT内认为速率保持不变。 ③在速率方程中左边的决策变量的时间下标一定是.KL。 实际上,在本时间间隔内计算的决策变量值将在下一时间间隔内的状态变量计算中才用到。本时间间隔内的KL到了下一时间间隔内就被标成了JK。正是此时间间隔内的速率值参与了下一步中的状态变量的计算。
(3)辅助方程(即A方程) • 我们定义辅助方程是在反馈系统中描述信息的运算式。 其中“辅助”的含义是帮助建立速率方程。辅助方程的直接作用是计算时刻K的辅助变量值。例如, A DISC.K=EXPINV.K-INV.K R RO.KL=DISK.K/TINV • 以上例子中参与决策变量RO.KL计算的变量DISC.K在辅助方程中加以定义和计算,它是一个辅助变量。
(4) 常数方程 (即C方程) • 常数方程有标准形式,其格式为, C 常数变量名=数值 例如, R RB.KL=POP.K*FB C FB=0.005
(5) 初始值方程 (即N 方程) • 初始值方程作用是给状态变量(L), 决策变量(R)或辅助变量(A)赋初始值。例如, L POP.K= POP.J+(DT)(IN.JK-OUT.JK) N POP=100000 R RB.KL= POP.K*FB N RB=100
(5) 初始值方程 2 另外,初始值方程也可以作用计算常数,例如, N VOL=H*W*L C H=0.5 C W=2 C L=3.5 注意,在初始值方程中的变量,需要去掉时间标志。
(6)表函数 表函数的作用是表示两个变量之间的非线性关系。 表函数的基本形式为: TABLE(TAB,X,XLOW,XHIGH,XINCR) 其中, TAB——表量名(因变量)。 X—— 自变量,具有时间下标。 XLOW——自变量X的最小取值。 XHIGH——自变量X的在最大取值。 XINCR——自变量X的取值的间隔。 自变量的取值规定为在最小值和最大值之间取等步长的若干值。 因变量取值由表量语句决定。
(6)表函数-例 • 要表示所示的函数关系,首先在横轴上等间隔地取若干值,作为自变量。然后按照所给的函数关系求得相应的函数值(因变量)。 X -3 -2 -1 0 1 2 3 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Y -20 0 10 16 20 24 30 A Y.K=TABLE(YTAB, X.K, -3, 3, 1) T YTAB=-20, 0, 10, 16, 20, 24,30
(6)表函数 A Y.K=TABLE(YTAB, X.K, -3, 3, 1) T YTAB=-20, 0, 10, 16, 20, 24,30 其中用到了一个T方程,而变量Y用辅助变量的形式表示。 辅助变量Y坐标的值是在特定点之上由插补求出的。DYNAMO中采用的是线性插补的方法。 线形插补是一种近似的方法,其优点在于它的灵活性和简单性。当然线形插补可能会产生一些误差,不过DYNAMO的可以把误差控制在允许的范围之内。
(6)表函数 表函数的书写中注意, ①TABLE函数的第一项变量名与T方程左边的变量名二者一定相同。 ②T方程无独立性。它必须与表示因变量的方程(如上例中的A方程)同时存在,并且一般将两者写在一起。
4.控制语句 (1)SAVE语句 需要保存其值的变量在本语句中加以规定。 (2)SPEC语句 本语句中规定与模拟运行有关的参数值。这些参数有: DT,表示模拟运行步长, LENGTH,表示模拟运行周期(长度), SAVPER,表示保存模拟结果数据间隔长度 。 标准格式为: SPEC ︼ ︼ DT=数值/LENGTH=数值/SAVPER=数值 例如: SPEC DT=2/LENGTH=90/SAVPER=2 其含义为:模拟步长为2(时间单位),模拟运行终止时间(模拟运行长度)为90,每隔2(时间单位)保存模拟数据。
5. 综合举例:(1) 人口模型 * This is a population model L POP.K=POP.J+(DT)(RB.JK-RD.JK) N POP=1200 R RB.KL=POP.K*FB C FB=.003 R RD.KL=POP.K*FD C FD=.0025 SPEC DT=2/LENGTH=80/SAVPER=2 SAV POP, RB, RD
(2) 库存模型 L INV.K=INV.J+DT*RO.JK N INV=50 R RO.KL= (EXPINV-INV.K)/TINV C EXPINV=750 C TINV=15 SPEC DT=2/LENGTH=60/SAVPER=2 SAV INV, RIN, ROUT
DYNAMO语言结束 以下看一阶系统