Solver Options
首先要知道为什么要选择不同的求解器(可以简单理解成不同的算法)。
在simulink中,搭建好模型后,点击开始仿真,simulink会先把你搭建好的模型转变成微分方程组。对微分方程组进行求解,就可以得到你希望输出的变量的数值。
而对于不同类型、不同阶数的微分方程组,并不是一招鲜吃遍天的。举个例子,对于算法A,有一些系统太过简单,有一种算法B明明更快,没必要用A;有一些系统太过复杂或特殊,算法A(在合理的时间内)求不出解,需要换一种算法C。这就是为什么需要选择不同算法的原因。
如果你在仿真过程中,发现结果非常奇怪,不符合理论,除了粗心导致参数设置错误之外,还有可能是求解器的问题!
1 type
仿真类型,有Variable-step(变步长)和fixed-step(定步长)两种。
1.1 Variable-step(变步长)
变步长可以在仿真的过程中改变步长,提供误差控制和过零检测
1.1.1 Solver(算法)
- Ode45
-
一种一步解法,即只要知道前一时间点的解,就可以立即计算当前时间点的方程解。
-
采用四阶-五阶龙格库塔算法,它用4阶方法提供候选解,5阶方法控制误差,其整体截断误差为(Δx)^5。解决的是Nonstiff(非刚性)常微分方程。
-
对大多数仿真模型来说,首先使用ode45来解算模型是最佳的选择,所以在SIMULINK的算法选择中将ode45设为默认的算法。若长时间没结果,应该就是刚性的,可换用ode15s试试。
- ode23
- 一种一步算法,用的是二阶龙格库塔算法,和ode45的基本思想是一致的。在容许误差和计算略带刚性的问题方面,该算法比ode45要好。反过来说,在精度方面,ode45更好一些。
- Ode113
- 在误差要求很严时,ode113算法比ode45更适合。
- ode113是一种多步算法,也就是需要知道前几个时间点的值,才能计算出当前时间点的值。
- Ode15s
- 它是一种多步算法,当遇到带刚性(Stiff)问题时或者使用ode45算法不行时,可以试试这种算法。
- Ode23s
- 在容许误差较大时,ode23s比ode15s有效,所以在解算一类带刚性的问题时用ode15s处理不行的话,可以用ode23s算法。
- Ode23t
- 一种采用自由内插方法的梯形算法。
- 如果模型有一定刚性,又要求解没有数值衰减时,可以使用这种算法。
- Ode23tb
- 在容差比较大时,ode23tb和ode23t都比ode15s要好。
- Discrete
- 这是处理离散系统(非连续系统)的算法。
1.1.2 Additional Options
- max step size
最大步长。
- 对于discrete的solver,默认值是模型中设置的最短采样时间。
- 对于连续型的solver,默认值为总仿真时长/50,即整个仿真过程中至少取50个采样点。
- 如果仿真时长为无限长(即stop time设为inf),默认值为0.2。
- 对于Sine和Signal Generator 模块,默认值采用别的算法。
- 如果模型包含周期性或近似周期性的行为,并且知道周期,那么将最大步长设置为该周期的某个部分(例如1/4)。
- min step size
最小步长
- 默认值是根据计算机的精度或何时发出warnings来自动调整的。
- 如果采用更小的步长,使误差更小,模型会发出warnings,提示允许的误差够大,不需要用那么小的步长
- initial step size
初始步长参数。一般建议使用auto即可。 - relative tolerance
相对误差。误差相对于状态的值,是一个百分比,默认值为1e-3,表示状态的计算值要精确到0.1% - absolute tolerance
绝对误差。可以理解成状态值为0的时候,可以接受的最大误差。如果设置成auto,则为1e-6 - shape preservation
字面理解为形状保存。意义是在每个时间步长采用导数来提高积分精度。有两个选项:
- disable all 不要对任何信号进行shape preservation。
- enable all 对所有信号进行shape preservation。
大部分的模型是不需要shape preservation的,只有那些models having signals whose derivative exhibits a high rate of change才适合用shape preservation,而且会增加仿真时长
1.2 fixed-step(定步长)
定步长提供固定的步长,不提供误差控制和过零检测
1.2.1 Solver(算法)
- Ode5
是仿真参数对话框的缺省值,是固定步长的ode45算法。适用于大多数连续或离散系统,不适用于刚性系统 - Ode4
具有一定的计算精度 - Ode3
- Ode2
- ode1
- Discrete
实现积分的固定步长解法,它适用于没有连续状态仅有离散状态模型的计算。