simulink——求解器(solver)相关理论

上传人:第*** 文档编号:31080147 上传时间:2018-02-04 格式:DOC 页数:4 大小:31KB
返回 下载 相关 举报
simulink——求解器(solver)相关理论_第1页
第1页 / 共4页
simulink——求解器(solver)相关理论_第2页
第2页 / 共4页
simulink——求解器(solver)相关理论_第3页
第3页 / 共4页
simulink——求解器(solver)相关理论_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《simulink——求解器(solver)相关理论》由会员分享,可在线阅读,更多相关《simulink——求解器(solver)相关理论(4页珍藏版)》请在金锄头文库上搜索。

1、1.变步长(Variable Step)求解器可以选择的变步长求解器有:ode45 ,ode23,ode113,odel5s,ode23s 和 discret缺省情况下,具有状态的系统用的是 ode45;没有状态的系统用的是 discrete1)ode45 基于显式 RungeKutta(4,5) 公式,DormandPrince 对它是个单步求解器(solver)。也就是说它在计算 y(tn)时,仅仅利用前一步的计算结果 y(tn-1)对于大多数问题在第一次仿真时、可用 ode45 试一下2)ode23 是基于显式 RungeKutta(2,3) Bogackt 和 Shampine 对对于

2、宽误差容限和存在轻微刚性的系统、它比 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 和 discrete1)ode5 是 ode45 的一个定步长版本,基于 DormandP

5、rince 公式2)ode4 是 RK4,基于四阶 RungeKutta 公式3) ode3 是 ode23 的定步长版本,基于 Bogacki-Sbampine 公式4) ode2 是 Heun 方法,也叫作改进 Euler 公式5) odel 是 Euler 方法6) discrete(定步长) 是不执行积分的定步长求解器它适用于没有状态的模型,以及对 过零点检测和误差控制不重要的模型 =3.诊断页(Diagnostics)可以通过选择 Simulation Parameters 对话框的 Diagnostics 标签来指明在仿真期间遇到一些事件或者条件时希望执行的动作对于每一事件类型,可

6、以选择是否需要提示消息,是警告消息还是错误消息警告消息不会终止仿真,而错误消息则会中止仿真的运行(1)一致性检查一致性检查是一个调试工具用它可以验证 Simulink 的 0DE 求解器所做的某些假设它的主要用途是确保 s 函数遵循 Simulink 内建模块所遵循的规则因为一致性检查会导致性能的大幅度下阵(高达 40),所以一般应将它设为关的状态使用一致性检查可以验证 s 函数,并有助于确定导致意外仿真结果的原因为了执行高效的积分运算,Simulink 保存一些时间步的结果,并提供给下一时间步使用例如,某一时间步结束的导数通常可以放下一时间步开始时再使用求解器利用这一点可以防止多余的导数运算

7、一致性检查的另一个目的是保证当模块被以一个给定的 t(时间)值调用时它产生一常量输出这对于刚性求解器(ode23s 和 odel5s)非常重要,因为当计算 Jacobi 行列式时模块的输出函数可能会被以相同的 t 值调用多次如果选择了一致性检查,Simulink 置新计算某些值,并将它们与保存在内存中的值进行比较,如果这些值有不相同的,将会产生一致性错误Simulink 比较下列量的计算值:1)输出;2)过零点3)导数;4)状态(2)关闭过零点检测可以关闭一个仿真的过零点检测对于一个有过零点的模型,关闭过零点检测会加快仿真的速度,但是可能影响仿真结果的精度这一选项关闭那些本来就有过零点检测的模

8、块的过零点检测它不能关闭 Hir crossing 模块的过零点检测(3)关闭优化 I/O 存储选择该选项,将导致 Simulink 为每个模块约 I()值分配单独的缓存,而不是重新利用援存这样可以充分增加大模型仿真所需内存的数量只有需要调试模型时才选择该选项在下列情况下,应当关闭缓存再利用;1)调试一个 C-MEX S-函数;2)使用浮点 scope 或 display 模块来察看调试模型中的信号如果缓存再利用打开,并且试图使用浮点 scope 或 display 模块来显示缓存已被再利用的信号,将会打开一个错误对话框(4) 放松逻辑类型检验选择该选项,可使要求逻辑类型输入的模块接受双精度类

9、型输入这样可保证与 Simulink 3 版本之前的模型的兼容性=4.提高仿真性能和精度仿值性能相精度由多种因素决定,包括模型的设计和仿真参数的选择求解器使用它们的缺省参数值可以使大多数模型的仿真比较精确有效,然而,对于一些模型如果调整求解器相仿真参数将会产生更好的结果而且,如果对模型的性能比较熟悉,并且将这些信息提供给求解器,得到的仿真效果将会提高。(1)加快仿真速度仿真速度慢的原因有多种下面列举其中的一些:1)模型中包含有 MATLAB 的 Fcn 模块当模型包含有 MATLAB 的 Fcn 模块时,在仿真的每一时间步都会调用 MATLAB 的解释器,这将大大地减慢仿真的速度因此应尽可能地

10、使用内建的 Fcn 模块或者 E1ementary Math 模块2)模型中包含有 M 文件形式的 S 函数M 文件形式的 S 函数也将导致在每一时间步调用MATLAB 的解释器可以考虑将 s 函数转换为子系统或者 c-MEx 文件形式的 s 函数3)模型中包含有 Memory 模块使用 Memory 模块使得变阶求解器 (odel5s 和 odell3)在每一时间步将阶数设为 1 阶4)最大的步长太小如果改变了最大步长可以试试重新使用缺省值(auto)运行仿真。5)对精度要求太高缺省的相对容差(0.1) 通常已经足够了对于状态值趋于 0 的模型如果绝对容差设得太小仿真时状态值在零点附近会花去

11、太多的时间步6)时间尺度可能太长减小时间间隔;7)问题可能是刚性的而使用的是非刚性求解器这时可用 odel5s 试一下;8)模型使用的采样时间相互之间不成倍数关系相互之间不成倍数的混合采样时间会导致求解器采用足够小的步长,以保证采样时间符合所有的采样时间要求9)模型包含有代数循环在每一时间步都会反复计算代数循环,因此这会大大地降低仿真的性能10)模型中将 Random Number 模块的输出传给了 Intergrator 模块对于连续系统,在Sources 库中使用 Bondlimited Noise 模块(2)改进仿真精度要检查仿真的精度仿真运行一段时间以后,减小相对容差到 1e-4 或者

12、减小绝对容差,并重新运行它比较两次仿真的结果如果它们之间没有很大的差别,可以确信结果收敛如果经过一段时间后,仿真结果变得不稳定,可能是如下原因:1)系统可能不稳定2)如果使用的是 odel5s,可能需要将最大的阶数限制在 2 阶( 求解器稳定的最大阶数),或者试试用 ode23s 求解器如果仿真结果看起来不是很精确,可能是:1)对于一个拥有趋于零的状态值的模型,如果绝对容差设得太大,仿真在零状态值附近花的步数太少减小绝对容差的大小或者在 Integrator 对话框中为每 个状态分别调整绝对容差的设定2)如果减小绝对容差不能有效地提高精度,减少相对容差的大小,减小步长,增加步数=5.处理复数信号在缺省状态下,simulink 信号值是实数尽管如此,模型可以产生相处理具有复数值的信号可以采取以下任何一种方法在模型中引入复数值信号1)由顶层瑞口从 MATLAB 工作空间向模型中装入复数值信号数据2)在模型中产生一个常数模块,并设置其值为复数3)产生实数信号分别对应于复数信号的实部和虚部然后用实- 虚复数转换(Real-Imag to Complex Conversion)模块将各部连成复数信号可以用接受复数的模块来处理复数信号,大多数 simulink 模块接受复数信导作为输入。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号