1、simulink仿真设置一、算法设置1.变步长(VariableStep)求解器可以选择的变步长求解器有:ode45,ode23,ode113,odel5s,ode23s和 discret缺省情况下,具有状态的系统用的是 ode45;没有状态的系统用的是 discrete。1)ode45基于显式 RungeKutta(4,5)公式,DormandPrince 对它是个单步求解器(solver)。也就是说它在计算 y(tn)时,仅仅利用前一步的计算结果 y(tn-1)对于大多数问题在第一次仿真时、可用 ode45试一下。2)ode23是基于显式 RungeKutta(2,3)Bogackt 和
2、Shampine对对于宽误差容限和存在轻微刚性的系统、它比 ode45更有效一些ode23 也是单步求解器。3)odell3是变阶 Adams-BashforthMoulton PECE求解器在误差容限比较严时,它比 ode45更有效odell3 是一个多步求解器,即为了计算当前的结果y(tn),不仅要知道前一步结果 y(tn-1),还要知道前几步的结果 y(tn-2),y(tn-3),;4)odel5s是基于数值微分公式(NDFs)的变阶求解器它与后向微分公式BDFs(也叫 Gear方法)有联系但比它更有效ode15s 是一个多步求解器,如果认为一个问题是刚性的,或者在用 ode45s时仿真
3、失败或不够有效时,可以试试 odel5s。 odel5s 是基于一到五阶的 NDF公式的求解器尽管公式的阶数越高结果越精确,但稳定性会差一些如果模型是刚性的,并且要求有比较好的稳定性,应将最大的阶数减小到 2选择 odel5s求解器时,对话框中会显示这一参数 可以用 ode23求解器代替。del5s,ode23 是定步长、低阶求解器。5)ode23s是基于一个 2阶改进的 Rosenbrock公式因为它是一个单步求解器,所以对于宽误差容限,它比 odel5s更有效对于一些用 odel5s不是很有效的刚性问题,可以用它解决。6)ode23t是使用“自由”内插式梯形规则来实现的如果问题是适度刚性,
4、而且需要没有数字阻尼的结果,可采用该求解器。7)ode23tb是使用 TRBDF2来实现的,即基于隐式 RungeKutta公式,其第一级是梯形规则步长和第二级是二阶反向微分公式两级计算使用相同的迭代矩阵与 ode23s相似,对于宽误差容限,它比 odtl5s更有效。8)discrete(变步长)是 simulink在检测到模型中没有连续状态时所选择的一种求解器。2.定步长(FlxedStep)求解器可以选择的定步长求解器有:ode5,ode4,ode3,ode2,ode1 和discrete。1)ode5是 ode45的一个定步长版本,基于 DormandPrince公式。2)ode4 是
5、RK4,基于四阶 RungeKutta公式。3) ode3是 ode23的定步长版本,基于 Bogacki-Sbampine公式。4) ode2是 Heun方法,也叫作改进 Euler公式。5) odel是 Euler方法。6) discrete(定步长)是不执行积分的定步长求解器它适用于没有状态的模型,以及对过零点检测和误差控制不重要的模型。3.总结ode45绝对是第一选择,当你弄不清情况的时候都可以选它。但是如果遇到刚性系统时,运算会很慢很慢,这时候你可以选择 ode23tb算法(有关资料显示这个算法收敛速度较快)。如果还不行,那你就可以考虑选择discrete方式了。当然,这是万金油式选
6、择,对我这种菜鸟来说这样足够了。但如果对算法有研究的大湿们,当然可以具体情况具体分析了。二、powergui 设置simulink仿真用到 simpowersystom库时,一般都要加 powergui模块,它储存了电路模型的等效数学模型(状态空间方程),有三种运行模式:连续方法(continous)、离散方法(discret)、相量方法(phasor)。小型系统(状态量 10个以下)用 continous运行比较好,连续变步长方法更快更精确,因为离散算法要想给出一个同等精度的结果需要的计算量要比连续的多出不少。使用二极管和晶闸管等整流电力电子器件情况下,变步长算法由于对事件更为敏感,有误差限
7、制和过零检测,可以精确探测到电流的过零点,故结果波形中不会有电流间断。算法可以根据模型选择合适的 ode算法。对于包含了许多状态和非线性模块(如电力电子器件)较多的大型系统建议用 discrete来运行,加快仿真速度。一旦系统被离散化,电路系统再无连续状态了,因此如果你不需要变步长积分方法进行仿真,前文所述的算法设置Simulation parameters可选择 Fixed-step和discrete(no continous state)。当你离散化系统时,仿真的精度由时间步长控制。若使用太大的时间步长,精度可能不够。确定时间步长是否合适的唯一方法是通过改变时间步长,反复仿真,比较仿真结果
8、。通常,对于在 50Hz或 60Hz的功率系统上或使用了线性整流功率电子元件(如二极管、可控硅等)的系统上进行暂态仿真,取 20us-50us的时间步长一般能取得较好的仿真效果。对于使用了强制整流功率电子开关的系统,必须减小时间步长。IGBT、场效应管、门极关断晶闸管等通常工作在很高的开关频率状态下,例如,要仿真一个工作在 8Hz的 PWM转换器,需要设置步长大约为 8us。 phasor就是稳态模型,没有状态量。 如果你只对电压电流的相位和幅值变化感兴趣,使用相量法是一个不错的选择。求解时不再解全部的微分方程,只要解关于电流电压相量的代数方程就行了,代数方程可比微分方程简单多了!正如名字,相
9、量法将电流电压视为相量。相量法对于包含大发电机和电动机的网络的暂态稳定性仿真十分好用 。在这种类型的问题中,我们感兴趣的是电机和调节器交互作用引起的电气机械振荡,这些振荡对基波电流电压产生一个低频的幅度相位调制。一般来讲,连续或者离散的方法不适合这种类型的问题。相量法中,使用一系列的代数方程代替网络微分方程,其中的快速的模态被忽略;使用一个由基频和相关输入输出组成的复矩阵代替网络的状态空间模型。由于相量法使用的是电机、涡轮机和调节器的慢速状态的简化模型,因此大大的减少了必需仿真时间。三、提高 simpowersystem的仿真速度1)使用 ode23解法器但效果很有限。2)对系统离散化,方法为
10、在你的 gui模块里选择discretize electric model,采样时间越大仿真越快,当然采样时间的设定要与你对系统精确性相配合,因为采样时间是与准确性成反比的。3)在仿真的过程中尽量少开启示波器窗口,示波器参数中的点数限制最好关闭。4)如果你的系统要从一个特定的状态开始仿真,在仿真参数设置是,最好在i/o选项中设置起始的状态矢量。5)开启加速器,(方法在菜单 仿真这一 项中可以设置),这个也能大大加快仿真速度。注:刚性系统是指描述系统的微分方程中包含有数个(大于等于 2)相互作用的变量且各个变量变化速度十分悬殊的系统。在使用 Repeating Sequence因为设置不正确会出
11、现不是三角波的情况(失真),这个与仿真的步长有关。其中的原因不是很懂。 首先、仿真时间要设置好,时间太长了就会一直等着。第二、变步长解法器也要设置第三、变步长的最大值也要设置当然越小越好,但是太小了会仿真的时间很长,就会一直在等着。仿真的时间很重要,有一次做斜坡函数如果仿真时间不够长,都无法到达自己想要的值,只能仿真一部分。http:/ 用户在 Type 后面的第一个下拉选项框中指定仿真的步长选取方式,可供选择的有 Variable-step(变步长)和 Fixed-step(固定步长)方式。变步长模式可以在仿真的过程中改变步长,提供误差控制和过零检测。固定步长模式在仿真过程中提供固定的步长,
12、不提供误差控制和过零检测。用户还可以在第二个下拉选项框中选择对应模式下仿真所采用的算法。变步长模式解法器有:ode45,ode23,ode113,ode15s,ode23s,ode23t ,ode23tb 和 discrete。ode45:缺省值,四/五阶龙格库塔法,适用于大多数连续或离散系统,但不适用于刚性(stiff)系统。它是单步解法器,也就是,在计算 y(tn)时,它仅需要最近处理时刻的结果 y(tn-1)。一般来说,面对一个仿真问题最好是首先试试 ode45。ode23:二/三阶龙格库塔法,它在误差限要求不高和求解的问题不太难的情况下,可能会比 ode45 更有效。也是一个单步解法器
13、。ode113:是一种阶数可变的解法器,它在误差容许要求严格的情况下通常比 ode45 有效。ode113 是一种多步解法器,也就是在计算当前时刻输出时,它需要以前多个时刻的解。ode15s:是一种基于数字微分公式的解法器( NDFs)。也是一种多步解法器。适用于刚性系统,当用户估计要解决的问题是比较困难的,或者不能使用 ode45,或者即使使用效果也不好,就可以用 ode15s。ode23s:它是一种单步解法器,专门应用于刚性系统,在弱误差允许下的效果好于 ode15s。它能解决某些 ode15s 所不能有效解决的 stiff 问题。ode23t:是梯形规则的一种自由插值实现。这种解法器适用
14、于求解适度 stiff 的问题而用户又需要一个无数字振荡的解法器的情况。ode23tb:是 TR-BDF2 的一种实现, TR-BDF2 是具有两个阶段的隐式龙格库塔公式。discrtet:当 Simulink 检查到模型没有连续状态时使用它。步长参数:对于变步长模式,用户可以设置最大的和推荐的初始步长参数,缺省情况下,步长自动地确定,它由值 auto 表示。Maximum step size(最大步长参数):它决定了解法器能够使用的最大时间步长,它的缺省值为“仿真时间/50”,即整个仿真过程中至少取 50 个取样点,但这样的取法对于仿真时间较长的系统则可能带来取样点过于稀疏,而使仿真结果失真
15、。一般建议对于仿真时间不超过 15s 的采用默认值即可,对于超过 15s的每秒至少保证 5 个采样点,对于超过 100s 的,每秒至少保证 3 个采样点。Initial step size(初始步长参数):一般建议使用“auto”默认值即可。仿真精度的定义(对于变步长模式)Relative tolerance(相对误差):它是指误差相对于状态的值,是一个百分比,缺省值为 1e-3,表示状态的计算值要精确到 0.1%。Absolute tolerance(绝对误差):表示误差值的门限,或者是说在状态值为零的情况下,可以接受的误差。如果它被设成了 auto,那么 simulink 为每一个状态设置
16、初始绝对误差为 1e-6。Mode(固定步长模式选择)Multitasking:选择这种模式时,当 simulink 检测到模块间非法的采样速率转换,它会给出错误提示。所谓的非法采样速率转换指两个工作在不同采样速率的模块之间的直接连接。在实时多任务系统中,如果任务之间存在非法采样速率转换,那么就有可能出现一个模块的输出在另一个模块需要时却无法利用的情况。通过检查这种转换,Multitasking 将有助于用户建立一个符合现实的多任务系统的有效模型。使用速率转换模块可以减少模型中的非法速率转换。Simulink 提供了两个这样的模块:unit delay 模块和 zero-order hold
17、模块。对于从慢速率到快速率的非法转换,可以在慢输出端口和快输入端口插入一个单位延时 unit delay 模块。而对于快速率到慢速率的转换,则可以插入一个零阶采样保持器 zero-order hold。Singletasking:这种模式不检查模块间的速率转换,它在建立单任务系统模型时非常有用,在这种系统就不存在任务同步问题。Auto:这种模式,simulink 会根据模型中模块的采样速率是否一致,自动决定切换到 multitasking 和singletasking。输出选项Refine output:这个选项可以理解成精细输出,其意义是在仿真输出太稀松时,simulink 会产生额外的精细
18、输出,这一点就像插值处理一样。用户可以在 refine factor 设置仿真时间步间插入的输出点数。产生更光滑的输出曲线,改变精细因子比减小仿真步长更有效。精细输出只能在变步长模式中才能使用,并且在 ode45 效果最好。Produce additional output:它允许用户直接指定产生输出的时间点。一旦选择了该项,则在它的右边出现一个 output times 编辑框,在这里用户指定额外的仿真输出点,它既可以是一个时间向量,也可以是表达式。与精细因子相比,这个选项会改变仿真的步长。Produce specified output only:它的意思是让 simulink 只在指定的时间点上产生输出。为此解法器要调整仿真步长以使之和指定的时间点重合。这个选项在比较不同的仿真时可以确保它们在相同的时间输出。