# 仿真设置-常规
在 Sysplorer 顶部菜单栏,进入主页 > 仿真设置
,弹出仿真设置对话框,弹窗默认显示常规标签页。
仿真区间参数说明:
开始时间:仿真开始的时间;
终止时间:仿真终止的时间,终止时间必须大于开始时间。当输入的终止时间为
inf时,表示终止时间无穷大。此时步数显示为inf且不可以修改。启动仿真后,仿真浏览器进度条变为无限进度条,用户停止仿真即为仿真正常结束。
输出区间参数说明:
步长:仿真输出点之间的间隔长度;
步数:仿真生成的输出间隔的数目,与区间长度的关系为:”步长 × 步数 =(终止时间 - 开始时间)” 。
积分算法参数说明:
类型:指定积分算法类型,有 4 种不同的算法类型可供选择:定步长、变步长、离散求解、自定义,不同的算法类型可以选取不同的算法;
变步长算法:仿真过程中改变步长,在模型状态快速变化时,会减小步长以提高准确性;当模型状态缓慢变化时,增加步长以避免执行不必要的时间步。
Dop853:基于 Dormand-Prince 的一种 8(5, 3) 阶显式龙格-库塔方法,是变步长单步方法。详细信息,请参见参考文献[7][8];
Dopri5:基于 Dormand-Prince 的一种 5(4) 阶显式龙格-库塔方法,是变步长单步方法,适用于非刚性问题,算法能检测到类刚性问题并发出警告。详细信息,请参见参考文献[5][6];
Mebdf:使用的是改进的扩展 BDF 方法,用于求解具有刚性初值的大型稀疏系统,是常微分方程系统(ODE)初值问题、线性隐式微分代数方程系统(DAEs)的求解器,Mebdf 具有更好的稳定性和高阶收敛性,但需要更多的计算。详细信息,请参见参考文献[9][10][11];
Mebdfi:是 Mebdf 求解微分代数方程的一个扩展方法,能有效处理刚性问题,适用于指标不大于 2 的 DAE 系统。详细信息,请参见参考文献[9][10][11];
Lsodar:是 LSODA 算法的一个变种,增加了 rootfinding 特征,所以支持事件定位。详细信息,请参见参考文献[14][15];
Cvode:一种变步长变阶的多步方法,是刚性/非刚性常微分方程系统(ODE)初值问题的求解器。详细信息,请参见参考文献[16][17];
Esdirk23、Esdirk34、Esdirk45:一种显式单对角隐式龙格-库塔(3 阶、4 阶、5 阶)。详细信息,请参见参考文献[18][19][20];
Ida:一种隐式变步长方法,是微分代数方程系统(DAE)初值问题(IVP)的通用求解器,IDA 包含 rootfinding 特征,支持准确的事件定位。详细信息,请参见参考文献[21][22];
定步长算法:按固定时间间隔在从仿真开始到仿真结束的时间段内解算模型。
离散求解算法:通过离散化手段,将微分代数方程转化成代数方程;
InlineImplicitEuler:内联隐式欧拉法;
InlineImplicitTrapezoid:内联梯形法;
自定义算法:由用户实现外部注册C文件mws_user_alg.c注册新算法;
- Custom:自定义求解算法。
容差:指定每个仿真步长的局部精度,最终(全局)的误差是由每一步的误差通过某种方式累积而成的;
积分步长:选择变步长算法时为初始积分步长,选择定步长算法时为固定积分步长;
分段固定积分步长:选择定步长积分算法时,该选项为可选状态,否则置灰。在选择定步长算法时,使用该功能设置不同时间段内的积分步数。
其中,停止时间与算法可在 Ribbon 菜单栏的仿真标签页快速修改。
# 步长设置
Sysplorer 在求解设置中对输出步长与积分步长进行了明确区分。其中,输出步长是指仿真结果存储的时间间隔,对应图中输出区间的步长,即每隔 1 个区间步长的时间存储或输出一次结果。输出步长在联合仿真时也称通讯步长。
对于变步长算法,积分步长实则为初始积分步长,即算法启动第一步的积分步长。初始积分步长默认为自适应,默认值参照 Dassl 算法中的设置取输出步长(输出区间步长)的千分之一,在如图所示,初始积分步长为 2e-6。通常情况下,用户不需要显式设置初始积分步长,采用自适应默认值即可。在如下两种情况下,建议尝试调整初始积分步长;
事件很多导致积分算法频繁重启,尝试增大初始积分步长;
变步长算法为保险起见,通常默认采用较小的初始积分步长,使得默认设置可以适应于大多数模型的求解,而非采用较大的初始积分步长,但经常第一步即求解失败。较小的初始积分步长在积分频繁重启时,显著影响求解效率。此时,在保证模型可成功求解的情况下,可尝试增大初始积分步长。
积分算法第一步即求解失败,尝试减小初始积分步长。
对一些仿真启动阶段高刚性或快变的模型,采用默认初始积分步长可能求解失败,此时尝试减小初始积分步长。
对于定步长算法,积分步长即为积分算法每步积分计算所采用的步长。要求积分步长为输出步长的整数分之一,故而界面中提供积分步数设置,如图所示。积分步数是指每个输出步长需要的积分步数,默认值为 1。
在如图设置情况下,积分步长为 0.008。通常情况下可采用默认积分步数设置,即输出步长与积分步长相等。但在步长太大导致求解失败,或步长太小导致结果文件太大的情况下,可调整积分步数设置。
# 精度设置
在采用定步长积分算法的情况下,精度设置只影响非线性方程求解。若模型中没有非线性方程,则求解设置中的精度对模型求解无用。在采用变步长积分算法的情况下,精度设置既影响积分计算,也影响非线性方程求解。
容差默认设置为 0.0001。除非采用默认设置求解失败,否则不建议加大精度设置以降低求解精度。
在此需要特别指出的是,变步长积分算法一般基于局部误差估计判定积分收敛性。局部收敛不意味着全局收敛,但全局收敛性判断因计算量超大而失去实用价值,这也就是现行通用积分算法采用局部收敛性判断的根本原因。因此,对于变步长积分算法,采用不同精度设置可能出现结果严重不一致情况。尽管这样的情况较少出现,但确实存在,包括 AIT SED 库与标准库中的少数模型出现过这种情况。
另外,对于定步长积分算法,能成功求解并不一定意味着求解结果收敛。
针对以上情况,给出如下建议:
采用定步长积分算法,先采用较小的积分步长计算一个参考结果,再基于参考结果选择合适的步长,以保证较快的求解速度;
因为只要积分步长足够小,定步长算法理论上是全局收敛的。但问题在于对一般问题,积分步长应该小到何种程度无法得知。一种比较有效的做法是,缩小 1~2 次步长,而目标变量曲线没有明显变化,那么求解结果很大可能是收敛的。
采用变步长积分算法,逐次将求解精度提高 1 个数量级,直至目标变量曲线无明显变化或求解失败。在结果稳定(更高的精度设置不会导致明显变化)情况下,选用较低的求解精度,以保证较快的求解速度。
# 分段固定积分步长
勾选分段固定积分步长后,将显示分段表格与编辑按钮,单击编辑按钮弹出步长编辑器。
步长编辑器中仅支持设置停止时间节点和积分步数,开始时间节点根据上一行数据的停止时间自动生成;
停止时间节点必须是输出区间步长的整数倍;
如图中的输出区间步长为 0.008,则所有停止时间节点都必须为 0.008 的整数倍。
积分步数要求必须为大于 0 的整数;
可通过右侧边栏的
与
增加或删除行。
# 保存到模型
对于可修改的模型,可以将仿真设置中的常规设置保存到模型中。
单击仿真设置对话框中的确定并保存到模型,保存仿真设置。
# 积分算法参考文献
积分算法 Dassl
[1]. Petzold L R. Description of DASSL: a differential/algebraic system solver[R]. Sandia National Labs., Livermore, CA (USA), 1982.
[2]. Brenan K E, Campbell S L, Petzold L R. Numerical solution of initial-value problems in differential-algebraic equations[M]. Society for Industrial and Applied Mathematics, 1995.积分算法 Radau5
[3]. Guglielmi N, Hairer E. Implementing Radau IIA methods for stiff delay differential equations[J]. Computing, 2001, 67: 1-12.
[4]. Wanner G, Hairer E. Solving ordinary differential equations II[M]. New York: Springer Berlin Heidelberg, 1996.积分算法 Dopri5
[5]. Dormand J R, Prince P J. A family of embedded Runge-Kutta formulae[J]. Journal of computational and applied mathematics, 1980, 6(1): 19-26.
[6]. E Hairer, S.P. Nørsett, G. Wanner. Solving Ordinary Differential Equations I[M]. New York: Springer Berlin Heidelberg, 1993.积分算法 Dop853
[7]. Dormand J R, Prince P J. A family of embedded Runge-Kutta formulae[J]. Journal of computational and applied mathematics, 1980, 6(1): 19-26.
[8]. E Hairer, S.P. Nørsett, G. Wanner. Solving Ordinary Differential Equations I[M]. New York: Springer Berlin Heidelberg, 1993.积分算法 Mebdf、Mebdfi
[9]. Cash J R. The integration of stiff initial value problems in ODEs using modified extended backward differentiation formulae[J]. Computers & mathematics with applications, 1983, 9(5): 645-657.
[10]. Cash J R, Considine S. An MEBDF code for stiff initial value problems[J]. ACM Transactions on Mathematical Software (TOMS), 1992, 18(2): 142-155.
[11]. Wanner G, Hairer E. Solving ordinary differential equations II[M]. New York: Springer Berlin Heidelberg, 1996.积分算法 Lsode
[12]. Computing A C H S. ODEpack, a Systemized Collection of ODE solvers[J]. North-Holland, Amsterdam, 1983.
[13]. Radhakrishnan K, Hindmarsh A C. Description and use of LSODE, the Livermore solver for ordinary differential equations[R]. 1993.积分算法 Lsodar
[14]. Computing A C H S. ODEpack, a Systemized Collection of ODE solvers[J]. North-Holland, Amsterdam, 1983.
[15]. Petzold L. Automatic selection of methods for solving stiff and nonstiff systems of ordinary differential equations[J]. SIAM journal on scientific and statistical computing, 1983, 4(1): 136-148.积分算法 Cvode
[16]. Hindmarsh A C, Brown P N, Grant K E, et al. SUNDIALS: Suite of nonlinear and differential/algebraic equation solvers[J]. ACM Transactions on Mathematical Software (TOMS), 2005, 31(3): 363-396.
[17]. Hindmarsh A C, Serban R. User documentation for CVODES, an ODE solver with sensitivity analysis capabilities[J]. Livermore (California): Lawrence Livermore National Laboratory, 2002, 189.积分算法 Sdirk34、ESdirk23、ESdirk34、ESdirk45
[18]. Kennedy C A, Carpenter M H. Higher-order additive Runge–Kutta schemes for ordinary differential equations[J]. Applied numerical mathematics, 2019, 136: 183-205.
[19]. Ranocha H, Sayyari M, Dalcin L, et al. Relaxation Runge–Kutta methods: Fully- discrete explicit entropy-stable schemes for the Euler and Navier–Stokes equations[J]. arXiv preprint arXiv:1905.09129, 2019.
[20]. Kværnø A. Singly diagonally implicit Runge–Kutta methods with an explicit first stage[J]. BIT Numerical Mathematics, 2004, 44: 489-502.积分算法 Ida
[21]. Brown P N, Hindmarsh A C, Petzold L R. Consistent initial condition calculation for differential-algebraic systems[J]. SIAM Journal on Scientific Computing, 1998 19(5): 1495-1512.
[22]. Brown P N, Hindmarsh A C, Petzold L R. Using Krylov methods in the solution of large-scale differential-algebraic systems[J]. SIAM Journal on Scientific Computing, 1994, 15(6): 1467-1488.积分算法 ImplicitEuler(隐式欧拉法,也称 backward euler method)
[23]. Butcher J C. Numerical methods for ordinary differential equations[M]. John Wiley & Sons, 2016.积分算法 ImplicitTrapezoid(梯形法,也称 Crank-Nicolson 法)
[24]. Crank J, Nicolson P. A practical method for numerical evaluation of solutions of partial differential equations of the heat-conduction type[C]//Mathematical proceedings of the Cambridge philosophical society. Cambridge University Press, 1947, 43(1): 50-67.
# 仿真模式
仿真模式支持以下两种:
普通模式支持仿真过程中的全部功能,仿真过程中软件与求解器存在仿真数据的通信,可能导致运行速度较慢。
快速模式仅保留仿真控制功能,屏蔽了仿真期间的数据通信,仿真速度较普通模式更快。
二者都可在仿真完成后查看仿真结果数据。
# 仿真模式的权衡
- 若不需要在仿真过程中实时查看变量数据及动画,想以更快速度完成仿真,在仿真完成后查看仿真结果,建议选择快速模式。
- 若需要在仿真过程中使用在线调参、调试、实时查看曲线、动画等功能,对仿真速度不要求极致,建议选择普通模式。
# 仿真模式的比较
下表对普通、快速模式仿真过程中可用的功能进行了比较。
| 仿真过程中可用的功能 | 普通模式 | 快速模式 |
|---|---|---|
| 仿真控制:暂停、继续、停止 | √ | √ |
| 曲线窗口、表格窗口、动画窗口 | √ | × |
| 在线调参 | √ | × |
| 组件二维动画 | √ | × |
| 调试 | √ | × |
| Sysblock 端口值标签 | √ | × |