《vensim中的函数说明》由会员分享,可在线阅读,更多相关《vensim中的函数说明(15页珍藏版)》请在金锄头文库上搜索。
1、第8章VensimPLE软件包中系统动力学函数系统动力学所以能处理复杂的系统问题,除提出流位流率系简化流率基本入树建模法去描述系统外,还有一个重要原因是其专用软件都设计了一系列通用的系统动力学函数。第一节数学、逻辑、测试函数8.1.1数学函数VensimPLE备有五种普通数学函数供用户使用。1SIN(X)定义1:SIN(X)为三角正弦函数,X须以弧度表示,其值小于8.35x105当自变量是角度时,应通过乘以2n/360转化为弧度。2EXP(X)定义2:EXP(X)=ex,e是自然对数的底,e=2.7182,X的值必须小于36。人们常用指数函数去描述系统,有了上面函数将会带来很大方便。3. LN
2、(X),变量X大于零。即以e为底的对数函数,它与EXP(X)互为反函数,这样可以用EXP(X)和LN(X)来计算非以e为底的幂函数和对数函数。4. SQRT(X)二丿X-,X必须是非负量。5. ABS(X)=|X|,对X取绝对值。8.1.2逻辑函数逻辑函数的作用类似于其它计算机语言中的条件语句,VensimPLE的逻辑函数有三种。1. 最大函数MAX(P,Q)MAX表示从两个量中选取较大者,P和Q是被比较的两个量,结果也是在这两个量中选取。P若PQ定义1:若MAX(P,Q)=Q若PQ其中P,Q是变量或常量,则MAX(P,Q)为最大函数。可用MAX函数从多个量中选取较大者。如从P,Q,D三个量中
3、选择较大者可用:MAX(D,MAX(P,Q)。最小函数Q若PQ定义2:若MIN(P,Q)=P若PQ则MIN(P,Q)为最小函数。MIN同MAX样,可以从MIN(P,Q)基本功能中派生出各种用法。3.选择函数IFTHENELSE(C,T,F)定义3:若IFTHENELSE(C,T,F)TC条件为真时=(C为逻辑表达式)F否则则IFTHENELSE(C,T,F)为选择函数。IFTHENELSE函数常用于仿真过程中作政策切换或变量选择。有时也叫条件函数。8.1.3测试函数设计这部分函数的目的主要是用于测试系统动力学模型性能用,所以称为测试函数。在给出测试函数以前,我们必须重申个概念,系统动力学的变量
4、皆是时间TIME的函数,所以当仿真时间TIME发生变化时,各变量值都随之发生变化。不过,各变量与TIME的依赖关系存在差别,有的是以TIME为直接自变量,有的则是间接变量。测试函数以TIME为直接自变量,但在函数符号中常缺省。1. 阶跃函数STEP(P,Q)定义1:Q若TIMEQ其中,P-阶跃幅度;Q-STEP从零值阶跃变化到P值的时间,则STEP(P,Q)为阶跃函数。图8.1.1阶路STEP(P,Q)和斜坡RAMP(A,B,C)函数图2. 斜坡函数RAMP(P,Q,R)定义2:0若TIMETIMEQP*(R-Q),若TIMER其中,P为斜坡斜率,Q为斜坡起始时间,R为斜坡结束时间,则RAMP
5、(P,Q,R)为斜坡函数。3. 脉冲函数PULSE(Q,R)定义3:若PULSE(Q,R)随TIME变化产生脉冲。其中:Q-第一个脉冲出现的时间R-相邻两个脉冲的时间间隔脉冲宽度为仿真步长,则PULSE(Q,R)为脉冲函数。4. 均匀分布随机函数RANDOMUNIFORM(A,B,S)定义5:RANDOMUNIFORM(A,B,S)产生在区间(A,B)内的均匀分布随机数,S给定随机数序列就确定,S取不同的值产生随机数序列也不同。RANDOMUNIFORM(A,B,S)为均匀分布随机函数。上面我们给出了四种测试函数,实际上还有前面数学函数SIN(X)等也可以作为测试函数。一个系统动力学模型,可以
6、通过改变常数再运行的办法,实现多种测试函数分别进行测试。第二节表函数8.2.1表函数表示形式1. VensimPLE中表函数表示形式定义1自变量与因变量的关系通过列表给出的函数叫表函数。例如下表就确定了一个表函数。自变0量X11.522.5因变1量Y0).5C2510表函数是系统动力学的一个重要特征,它用于建立两个变量之间的非线性关系,特别是软变量之间的关系。例如:员工士气对工作效率的影响程度。一般,两个变量先归一化或者先规整化,再根据经验给出大致的关系图来。这样设计的变量是无量纲量。在进入VensimPLE软件EquationEditor,即点去图标Y=X2后,若方程还未定义,有ASGrap
7、h选项。选择此选项,会出现下面对话框。该对话框用于图形化定义,上例表函数可直接填入框中(图8.2.1)。包括自变量和函数值即因变量值列举,自变量和函数的最大值等。当自变量为非已知统计点时,可用线性插值法取其近似值。用鼠标左键在图形框中点按,会自动构成图形。VensimPLE软件中表函数表达形式还可通过选择方程类型TYPE中Lookup进行列举表出,即把表函数自变量,因变量最大值、最小值及一些自变量与因变量对应的点值列出。如上例描述的表函数可以在方程输入框写成:(0,0)-(10,10)(0,0.5)(1,1)(1.5,2)(2,5)(2.5,10)其中中前面()中0,0分另为自变量、因变量最小
8、值,若自变量小于最小值,因变量取最小值,后面()中10,10分别为自变量、因变量最大值,若自变量超出最大值,因变量取最大值,后面五个()是已知自变量和因变量对值点,若自变量值不在给出点中,则自动用线性插值法求因变量对应值。自变量、因变量的最小值、最大值可依据实际背景来确定,列出的对应值点作为已知点可从历史数据中计算或分析给出。VensimPLE专用软件对表函数的增减性、取值间隔均匀性没有严格要求,但使用者可根据实际问题给出取值间隔、分段满足增减性的表函数。在VensimPLE中建立的入树或流图内一个表函数必须有三部分完成,即一个自变量X,个因变量Y及一个Y关于X的因子表,其因果关系为:Y变量方
9、程可写为:/Y变量=X因子表(X变量)X因子表X变量上例表函数中X因子表=(0,0)-(10,10)(0,0.5)(1,1)(1.5,2)(2,5)(2.5,10)表函数的建立方法将在8.2.2介绍。2. MicroDYNAMO及PDPLUS中表函数表示形式与VensimPLE软件不同的是在MicroDYNAMO及PDPLUS中有特定不同类型,其表示含义可由定义给出并固定下来。现使用Vensim软件的读者,可以不阅读下面内容。MicroDYNAM0两类表函数定义1:若TABLE(TY,X.K,XLOW,XHIGH,XINCR)中:TY-表量名(因变量已给值)X-自变量XLOW-自变量X的最小值
10、XHIGH-自变量X的最大值XINCR-自变量X的取值间隔自变量取值为XLOW至XHIGH间以等间隔XINCR取X,X,Xm个值,12m且m=(XHIGH-XLOW)/XINCR+1对应于X,X,X的TY的值在DYNAMO方程中以T方程:12mTTY=E/E/E给出。12m当X(XLOW,XHIGH),但X。弄Xi(i=l,2,m)时,其变量值按线性插法给出,当X的值超出XLOW,XHIGH范围时,因变量取对应的端点值,并给出警告信息。则TABLE(TY,X.K,XLOW,XHIGH,XINCR)称为第一类表函数。TTY=E/E/E称为其表量语句,又称为T语言。12m例1:已知两变量X和Y,因
11、变量Y随自变量X变化的关系的曲线所示(图8.2.2)自变量X从X=-3开始,按等距离取7个点得表8.2.1。设Y为辅助变量,用第一类表函数语句表示的DYNAMO语句为:AY.K=TABLE(TY,X.K.-3.3.1)TTY=-20/0/10/16/20/24/30。注1:该例在VensimPLE中变量关系图为:Y变量方程可写为:/Y变量=X因子表(X变量)X因子表X变量X因子表二(-3,-20)-(3,20)(-3,-20),(-2,0),(-1,10),(0,16),(1,20),(2,24),(3,30)(曲线如图8.2.3)当X值超出-3,3时,Y取对应的端点值,不给出警告信息。定义2
12、:若TABHL(TY,X.K,XLOW,XHIGH,XINCR)中随X的取值范围超出XLOW,XHIGH时,因变量取对应的端点值,但不给出错误信息外,其它内容与第一类表函数相同,则TABHL(TY,X.K,XLOW,XHIGH,XINCR)称为第二类表函数。注2:在PDPLUS语言中,表函数中T语句中斜线改为了逗号,且定义了下面两类表函数,不妨称为第三、第四类表函数。第三类表函数为:TABXL(TY,X.K,XLOW,XHIGH,XINCR),此表函数,除X取值范围超出XLOW,XHIGH范围时,因变量取端点的趋势外推值外,其它内含与第一类表函数相同。第四类表函数为:TABPL(TY,X.K,
13、XLOW,XHIGH,XINCR),此表函数除利用多项式使曲线在各点起滑连接代替线段连接外,其它含义与第一类表函数相同,但表量语的数值后要加上m个零,如,对前面第一类表函数的例子,改为TABPL,则写为:AY.K=TABPL(TY,X.K.-3.3.1)TTY=-20,0,10,16,20,24,30,0,0,0,0,0,0,0。8.2.2表函数建立方法介绍前面介绍的VensimPLE专用软件,DYNAMO语言表达表函数的方式,是比较简单、容易接受的,但一个表函数的建立却不是如此容易的,往往是一个定性与定量相结合反复分析的结果,要建立一个具体表函数,肯定必须考虑所涉及的自变量、因变量的实际背景
14、,再仔细研究其包含的一般数学问题及一般统计问题,进行深层次的量化分析,最后得出能反应变量间一般关系规律的量表作为表函数才能用于SD模型,日常生活中,可以经常碰到时间间隔相同的统计年报表、季报表、月报表,这些都是表函数。但是,在建立一个实际系统的SD模型时,这些统计报表很难作为一个完整的表函数直接放入模型中。其一,表函数不一定以时间为自变量,实践表明,表函数的自变量很多是同模型中其它一个或若干个变量的因变量;其二,统计报表没有未来若干年的预测数据,而SD模型的目标重点在对未来规律的仿真。根据以上分析和以往的经验,建立一个具体表函数,必须涉及下面基本步骤:一、确定变量变化范围及取值间隔:首先根据实
15、际背景,初步统计或估计因变量,自变量变化范围,即最小值、最大值,再依据获取数据的难易程度及灵敏度、精确度的要求来确定变量点间的取值间隔,由于VensimPLE中自变量间隔不一定要求均匀,在定取值间隔时可依实际背景把变量范围看作一个阶段或若干阶段来定,在不同阶段,取值间隔可不一样,目的是必须准确反应变量间变化规律。二、确定函数的变化趋势根据变量间因果关系极性来确定函数的增减规律,对整个变量范围要进行分析,可能某阶段呈递增态,另一个阶段呈现递减态,有的阶段不明显,根据变化幅度大小可以调整各阶段取值间隔点间隔及点密度。三、找出特殊点与特殊线针对一个实际系统,建立SD模型,调用的表函数往往涉及到一些特殊取值点,如极值点、参照点、临界点,若有这些起点,在用VensimPLE时,最好能直接给出在表函数的表达形式中,比如一个表函