在仿真软件金宝appgydF4y2Ba®gydF4y2Ba模型中,一个gydF4y2Ba代数循环gydF4y2Ba当信号环路中只有直接馈通块时发生。gydF4y2Ba直接喂养gydF4y2Ba表示块输出取决于输入端口的值;输入的值直接控制输出的值。gydF4y2Ba
有些块有直接馈通的输入端口。金宝appSimulink无法计算这些块的输出,如果不知道在当前时间步长在这些输入端口进入块的信号的值。gydF4y2Ba
一些带有直接馈通输入的区块示例如下:gydF4y2Ba
状态方程gydF4y2Ba,当D矩阵系数非零时gydF4y2Ba
转移FcngydF4y2Ba当分子和分母的顺序相同时gydF4y2Ba
Zero-PolegydF4y2Ba,当块作为杆子的零点gydF4y2Ba
间接直通的gydF4y2Ba块维护状态变量。两个例子是gydF4y2Ba积分器gydF4y2Ba和gydF4y2Ba单位延迟gydF4y2Ba.gydF4y2Ba
要确定一个块是否有直接馈通,请读取gydF4y2Ba特征gydF4y2Ba块参考页的部分。gydF4y2Ba
图中显示了一个代数循环的示例(仅用于演示,不是推荐的建模模式)。的gydF4y2Ba和gydF4y2Ba块是代数变量gydF4y2BaxgydF4y2Ba一个gydF4y2Ba这被限制为等于第一个输入gydF4y2BaugydF4y2Ba减gydF4y2BaxgydF4y2Ba一个gydF4y2Ba(例如,gydF4y2BaxgydF4y2Ba一个gydF4y2Ba=gydF4y2BaugydF4y2Ba- - - - - -gydF4y2BaxgydF4y2Ba一个gydF4y2Ba)。gydF4y2Ba
这个简单循环的解是gydF4y2BaxgydF4y2Ba一个gydF4y2Ba=gydF4y2BaugydF4y2Ba/2gydF4y2Ba.gydF4y2Ba
金宝appSimulink包含一套用于模拟的数值求解器gydF4y2Ba常微分方程gydF4y2Ba,这些方程组可以写成gydF4y2Ba
地点:gydF4y2Ba
xgydF4y2Ba是国家矢量。gydF4y2Ba
tgydF4y2Ba为独立时间变量。gydF4y2Ba
一些等式系统包含涉及独立变量和状态向量的附加约束,而不是状态向量的衍生物。这些系统是gydF4y2Ba差分代数方程(Daes)gydF4y2Ba,而不是常微分方程。gydF4y2Ba
这个词gydF4y2Ba代数gydF4y2Ba指的是不包含任何导数的方程。可以用半显式形式表示工程中出现的daegydF4y2Ba
地点:gydF4y2Ba
fgydF4y2Ba和gydF4y2BaggydF4y2Ba可以是矢量函数。gydF4y2Ba
第一个方程是微分方程。gydF4y2Ba
第二等式是代数方程。gydF4y2Ba
微分变量的向量是gydF4y2BaxgydF4y2Ba.gydF4y2Ba
代数变量的向量为gydF4y2BaxgydF4y2Ba一个gydF4y2Ba.gydF4y2Ba
在Si金宝appmulink模型中,代数循环是代数约束。带代数循环的模型定义了差分代数方程的系统。金宝appSimulink不会直接解决Daes。金宝appSimulink以数字方式解决代数方程(代数循环)gydF4y2BaxgydF4y2Ba一个gydF4y2Ba在颂歌求解器的每个步骤。gydF4y2Ba
的gydF4y2Ba模型gydF4y2Ba图中等价于此半显式方程组:gydF4y2Ba
在ODE求解器的每一步,代数循环求解器都必须求解的代数约束gydF4y2BaxgydF4y2Ba一个gydF4y2Ba在计算导数之前gydF4y2Ba .gydF4y2Ba
代数约束:gydF4y2Ba
在物理系统建模时发生,通常是由于守恒定律,如质量和能量守恒gydF4y2Ba
当您为模型选择一个特定的坐标系时发生gydF4y2Ba
帮助在动态系统中对系统响应施加设计约束gydF4y2Ba
使用Simscape™来模型系统,跨越机械,电气,液压和其他物理域作为物理网络。Simscape构造了表征模型行为的daes。该软件将这些方程与模型的其余部分集成,然后直接解决Daes。金宝appSimulink同时解决不同物理域中的组件的变量,避免了代数循环的问题。gydF4y2Ba
一个gydF4y2Ba人工代数循环gydF4y2Ba当原子子系统或模型块导致Simulink检测代数循环时发生,即使子系统的内容不包含代数约束。金宝app当您创建原子子系统时,所有的import块都是直接馈通的,从而导致一个代数循环。gydF4y2Ba
从这开始gydF4y2Ba模型gydF4y2Ba,它不包含代数循环。它模拟无误。gydF4y2Ba
将Controller和Plant模块封装在一个子系统中。gydF4y2Ba
在“子系统块”对话框中,选择gydF4y2Ba当作原子单位对待gydF4y2Ba制作子系统原子。gydF4y2Ba
在gydF4y2Ba诊断gydF4y2Ba“模型配置参数”窗格中,设置gydF4y2Ba代数循环gydF4y2Ba参数到gydF4y2Ba错误gydF4y2Ba
.gydF4y2Ba
当模拟gydF4y2Ba模型gydF4y2Ba,一个代数循环发生,因为子系统是直接馈通的,即使原子子系统中的路径不是直接馈通的。模拟因代数循环错误而停止。gydF4y2Ba
如果你的模型包含一个代数循环:gydF4y2Ba
您不能为模型生成代码。gydF4y2Ba
Simu金宝applink代数循环求解器可能无法求解代数循环。gydF4y2Ba
当Simul金宝appink试图解决代数循环时,仿真执行得很慢。gydF4y2Ba
对于大多数模型,代数环路求解器在第一次进行计算地昂贵。金宝appSimulink迅速解决了随后的时间步长,因为一个良好的起点gydF4y2BaxgydF4y2Ba一个gydF4y2Ba可从前一步步提供。gydF4y2Ba
使用这些技术在你的模型中搜索代数循环:gydF4y2Ba
使用gydF4y2BagetAlgebraicloops.gydF4y2Ba
来识别模型中的代数循环,并在Simulink编辑器中突出显示它们。金宝app用这种方法:gydF4y2Ba
您可以遍历多个模型层次结构来定位代数循环。gydF4y2Ba
你可以识别实数和人工代数循环。gydF4y2Ba
您可以同时可视化模型中的所有循环。gydF4y2Ba
您不需要在界限上进出模型。gydF4y2Ba
您无需以串行顺序检测循环。此外,您无需每次检测到循环时都要编译模型。因此,您可以快速解决循环。gydF4y2Ba
在整个模型上执行代数循环高亮显示,而不是在特定的子系统上。gydF4y2Ba
打开模型。gydF4y2Ba
在gydF4y2Ba诊断gydF4y2Ba“模型配置参数”窗格,设置gydF4y2Ba代数循环gydF4y2Ba到gydF4y2Ba没有一个gydF4y2Ba
或gydF4y2Ba警告gydF4y2Ba
.将此参数设置为gydF4y2Ba错误gydF4y2Ba
防止模型编译。gydF4y2Ba
编译模型时不带任何错误。在突出显示任何代数循环之前,必须先编译模型。gydF4y2Ba
在MATLABgydF4y2Ba®gydF4y2Ba命令提示符中,输入:gydF4y2Ba
金宝appSimulink.BlockDiagram.getAlgebraicLoops (bdroot)gydF4y2Ba
的gydF4y2BagetAlgebraicloops.gydF4y2Ba
功能突出显示模型中的代数循环,包括子系统中的代数循环。它还创建了一个关于每个循环的信息的报告:gydF4y2Ba
实线代表真正的代数循环。gydF4y2Ba
虚线表示人工代数循环。gydF4y2Ba
一个红色的高亮部分出现在分配了一个代数变量的块周围。gydF4y2Ba
的gydF4y2Ba循环IDgydF4y2Ba帮助您识别包含特定循环的系统。gydF4y2Ba
自定义报表通过选择或清除gydF4y2Ba可见gydF4y2Ba复选框循环。gydF4y2Ba
一旦确定了模型中的代数循环,就可以通过编辑模型来删除它们。关闭突出显示报告并对模型进行更改。只有在关闭报表后,才能编辑模型。关于去除实际代数循环的信息,请参见gydF4y2Ba消除代数环gydF4y2Ba.gydF4y2Ba
金宝appSimulink不保存循环高亮显示。关闭模型或退出显示将删除循环突出显示。gydF4y2Ba
金宝appSimulink在仿真初始化期间检测代数循环,例如,当您更新图表时。您可以设置gydF4y2Ba代数循环gydF4y2Ba诊断报告错误或警告,如果软件检测到任何代数循环在您的模型。gydF4y2Ba
在gydF4y2Ba诊断gydF4y2Ba模型配置参数的窗格,设置gydF4y2Ba代数循环gydF4y2Ba参数。gydF4y2Ba
设置gydF4y2Ba | 模拟反应gydF4y2Ba |
---|---|
没有一个gydF4y2Ba |
金宝appSimulink试图解决代数循环;仅在代数循环无法解决时报告错误。gydF4y2Ba |
警告gydF4y2Ba |
代数循环会产生警告。金宝appSimulink试图解决代数循环;仅在代数循环无法解决时报告错误。gydF4y2Ba |
错误gydF4y2Ba |
代数循环停止初始化。在Simulink尝试解决循环之前,手动检查循环。金宝appgydF4y2Ba |
此示例显示如何使用代数循环诊断突出显示代数循环gydF4y2Basldemo_hydcylgydF4y2Ba
模型。gydF4y2Ba
打开gydF4y2Basldemo_hydcylgydF4y2Ba模型。gydF4y2Ba
在gydF4y2Ba诊断gydF4y2Ba模型配置参数的窗格,设置gydF4y2Ba代数循环gydF4y2Ba参数到gydF4y2Ba错误gydF4y2Ba
.gydF4y2Ba
模拟模型。gydF4y2Ba
当Simu金宝applink在初始化期间检测到代数循环时,模拟停止。诊断查看器显示错误消息,并列出模型中的所有块,这些块是该代数循环的一部分。gydF4y2Ba
在模型中,红色高亮显示组成循环的块和信号。gydF4y2Ba
关闭诊断查看器以删除突出显示。gydF4y2Ba
关闭gydF4y2Basldemo_hydcylgydF4y2Ba
模型。不要保存更改。gydF4y2Ba
使用gydF4y2Ba的演出gydF4y2Ba
命令在Simulink调试器中金宝app突出显示代数循环并逐步通过仿真。gydF4y2Ba
打开gydF4y2Basldemo_hydcylgydF4y2Ba模型。gydF4y2Ba
默认情况下,gydF4y2Ba代数循环gydF4y2Ba参数设置为gydF4y2Ba没有一个gydF4y2Ba
.gydF4y2Ba
启动Simulink金宝app调试器。选择gydF4y2Ba模拟gydF4y2Ba>gydF4y2Ba调试gydF4y2Ba>gydF4y2Ba调试模式gydF4y2Ba.gydF4y2Ba
运行调试器。gydF4y2Ba
在MATLAB命令提示符中,输入:gydF4y2Ba
的演出gydF4y2Ba
该命令返回代数循环gydF4y2Basldemo_hydcylgydF4y2Ba
以及循环中的块数。gydF4y2Ba
找到1代数循环:系统编号#代数循环ID,循环中的块数 - 0#1,9块循环gydF4y2Ba
要在此代数循环中列出块,请在MATLAB命令提示符下输入:gydF4y2Ba
Ashow 0#1gydF4y2Ba
阀/缸/活塞/弹簧组件子系统中的控制阀流子系统在模型中突出显示的代数环。该函数列出了代数循环中的九个块:gydF4y2Ba
- sldemo_hydcyl /阀门/ /汽缸活塞/ / / /弹簧组/控制阀流量/ IC - sldemo_hydcyl /阀门/ /汽缸活塞/ / / /弹簧组/控制阀流量/签署√- sldemo_hydcyl /阀门/ /汽缸活塞/ / / /弹簧组/控制阀流量/产品- sldemo_hydcyl /阀门/ /汽缸活塞/ / / /弹簧装配/层流压降-sldemo_hydcyl/阀//缸//活塞//弹簧总成/Sum7 - sldemo_hydcyl/泵/IC - sldemo_hydcyl/阀//缸//活塞//弹簧总成/控制阀流量/gydF4y2Ba
Sum1(代数变量)- sldemo_hydcyl/Pump/Sum1 - sldemo_hydcyl/Pump/leak(代数变量)gydF4y2Ba
如果S金宝appimulink在你的模型中报告了一个代数循环,代数循环求解器可能能够解决这个循环。如果S金宝appimulink不能解决这个循环,有几种方法可以消除这个循环。gydF4y2Ba
使用此工作流程决定如何消除代数循环。gydF4y2Ba
当模型包含代数循环时,Simulink在每次步骤中使用非线性求解器来解决代数循环。金宝app如果有一个,则求解器执行迭代以确定对代数约束的解决方案。因此,具有代数循环的模型可以比没有代数环的模型更慢地运行。gydF4y2Ba
金宝appSimulink使用狗腿信任区域算法来解决代数循环。所使用的公差小于ODE求解器gydF4y2BaReltolgydF4y2Ba
和gydF4y2BaAbstolgydF4y2Ba
.这是因为Simulink使用了“金宝app显式ODE方法”来求解Index-1微分代数方程(DAEs)。gydF4y2Ba
为了让代数循环求解器工作,gydF4y2Ba
必须有一个块,在那里循环求解器可以打破循环并尝试解决循环。gydF4y2Ba
该模型应具有真正的双信号。gydF4y2Ba
潜在的代数约束必须是一个光滑函数gydF4y2Ba
例如,假设您的模型有一个带有两个输入的Sum块——一个是加法,另一个是减法。如果将Sum块的输出输入到其中一个输入,就创建了一个代数循环,其中所有块都包含直接馈通。gydF4y2Ba
在不知道输入的情况下,Sum块无法计算输出。金宝appSimulink检测代数循环,代数循环求解器使用迭代循环求解循环。在Sum块的例子中,软件这样计算正确的结果:gydF4y2Ba
xgydF4y2Ba一个gydF4y2Ba(gydF4y2BatgydF4y2Ba)=gydF4y2BaugydF4y2Ba(gydF4y2BatgydF4y2Ba) / 2。gydF4y2Ba
代数循环求解器使用基于梯度的搜索方法,其需要与代数环的代数约束的连续第一导数。结果,如果代数环包含不连续性,则代数循环求解器可能会发生故障。gydF4y2Ba
有关更多信息,请参见gydF4y2Ba用MATLAB和Simulink求解Index-1 DAEs金宝appgydF4y2Ba[gydF4y2Ba1gydF4y2Ba]gydF4y2Ba
Simu金宝applink代数循环求解器使用两种算法中的一种来解决代数循环:gydF4y2Ba
信赖域gydF4y2Ba
线搜索gydF4y2Ba
缺省情况下,代数循环求解器使用信任区域算法。gydF4y2Ba
如果代数循环求解器无法使用信任区域算法解决代数循环,请尝试使用线路搜索算法模拟模型。gydF4y2Ba
要切换到行搜索算法,在MATLAB命令行输入:gydF4y2Ba
set_param (gydF4y2Bamodel_namegydF4y2Ba、“AlgebraicLoopSolver”、“LineSearch”);gydF4y2Ba
要切换回信任区域算法,在MATLAB命令行输入:gydF4y2Ba
set_param (gydF4y2Bamodel_namegydF4y2Ba、“AlgebraicLoopSolver”、“TrustRegion”);gydF4y2Ba
有关更多信息,请参见:gydF4y2Ba
Shampine和解决的gydF4y2Banleqn.m代码gydF4y2Ba
FORTRAN程序HYBRD1gydF4y2BaMINPACK-1的用户指南gydF4y2Ba[gydF4y2Ba2gydF4y2Ba]gydF4y2Ba
鲍威尔的"求解非线性方程组的Fortran子程序"gydF4y2Ba非线性代数方程的数值方法gydF4y2Ba[gydF4y2Ba3.gydF4y2Ba]gydF4y2Ba
非线性最小化的信任区域方法gydF4y2Ba(优化工具箱)在优化工具箱™文档中。gydF4y2Ba
线搜索gydF4y2Ba(优化工具箱)在优化工具箱文档中。gydF4y2Ba
代数环求解是一种迭代过程。只有当代金宝app数循环收敛到明确的答案时,Simulink代数循环求解器才能成功。当循环无法收敛或收敛太慢时,模拟退出错误。gydF4y2Ba
代数循环求解器无法解决包含以下任何一种的代数循环:gydF4y2Ba
具有离散值输出的块gydF4y2Ba
具有非双精度或复杂输出的块gydF4y2Ba
不连续性gydF4y2Ba
州流程gydF4y2Ba®gydF4y2Ba图表gydF4y2Ba
使用这些技术来消除模型中的代数循环。gydF4y2Ba
当原子子系统创建反馈循环时,代数循环可以在大型模型中发生。gydF4y2Ba
在这个通用模型中,有两个代数循环涉及到子系统。gydF4y2Ba
BlackBox_A - > BlackBox_B - > BlackBox_C - > BlackBox_AgydF4y2Ba
BlackBox_B - > BlackBox_C - > BlackBox_BgydF4y2Ba
当你更新这个模型时,Simulink检测到循环Black金宝appBox_A - > BlackBox_B - > BlackBox_C - > BlackBox_A。gydF4y2Ba
由于您不知道这些子系统的内容,因此通过添加一个来打破循环gydF4y2Ba单位延迟gydF4y2Ba在子系统之外进行封锁。有三种方法来使用gydF4y2Ba单位延迟gydF4y2BaBlock来打破这些循环:gydF4y2Ba
添加一个gydF4y2Ba单位延迟gydF4y2Ba之间的gydF4y2BaBlackBox_AgydF4y2Ba
和gydF4y2BaBlackBox_CgydF4y2Ba
.gydF4y2Ba
添加一个gydF4y2Ba单位延迟gydF4y2Ba之间的gydF4y2BaBlackBox_BgydF4y2Ba
和gydF4y2BaBlackBox_CgydF4y2Ba
.gydF4y2Ba
添加gydF4y2Ba单位延迟gydF4y2Ba块到两个代数循环。gydF4y2Ba
在BlackBox_A和BlackBox_C之间添加单位延迟gydF4y2Ba
如果在子系统BlackBox_A和BlackBox_C之间的反馈信号上增加一个单位延迟,则系统将引入最小单位延迟数(1)。通过引入BlackBox_A、BlackBox_B和BlackBox_C使用当前时间步长的延迟。gydF4y2Ba
在BlackBox_B和BlackBox_C之间添加单位延迟gydF4y2Ba
如果在子系统BlackBox_B和BlackBox_C之间添加单位延迟,则在BlackBox_B和BlackBox_C之间打破代数循环。此外,您可以在BlackBox_A和BlackBox_C之间打破循环,因为该信号完成了代数循环。通过插入gydF4y2Ba单位延迟gydF4y2Bablock before BlackBox_C, BlackBox_C现在只与前一个时间步骤的数据工作。gydF4y2Ba
给两个代数环加上单位延迟gydF4y2Ba
在此处的示例中,您插入gydF4y2Ba单位延迟gydF4y2Ba块来打破两个代数循环。在这个模型中,BlackBox_A和BlackBox_B使用上一个时间步骤的数据。BlackBox_C使用来自当前时间步骤的数据。gydF4y2Ba
如果S金宝appimulink无法解决代数循环,则软件会报告错误。使用这些技术之一来手动解决循环:gydF4y2Ba
使用诸如坐标的区分或更改等技术重构底层dae。这些技术将dae以一种更易于代数循环求解器求解的形式进行。gydF4y2Ba
将Daes转换为ODES,消除任何代数循环。gydF4y2Ba
使用IC和代数约束块创建初始猜测。gydF4y2Ba您的模型可能包含循环求解器不能在没有良好的初始猜测的情况下收敛的循环。您可以为代数状态变量指定初始猜测,但仅在您认为循环合法时才使用此技术。gydF4y2Ba
有两种方法可以指定初始猜测:gydF4y2Ba
一个地方gydF4y2Ba我知道了gydF4y2Ba块在代数循环中。gydF4y2Ba
在代数循环中使用gydF4y2Ba代数约束gydF4y2Ba块。gydF4y2Ba
使用这些技术来消除模型中的人工代数循环:gydF4y2Ba
如果原子子系统引起人工代数循环,则将原子子系统转换为虚拟子系统。此更改对模型的行为没有影响。当子系统是原子的并且你模拟模型时,Simulink调用代数循环求解器。金宝app求解器在一次迭代后终止。代数循环是自动解决的,因为没有代数常数。使子系统虚拟后,Simulink在模拟期间不会调用代数循环求解器。金宝appgydF4y2Ba
将原子子系统转换为虚拟子系统:gydF4y2Ba
打开包含原子子系统的模型。gydF4y2Ba
右键单击原子子系统并选择gydF4y2Ba子系统参数gydF4y2Ba.gydF4y2Ba
清除gydF4y2Ba当作原子单位对待gydF4y2Ba参数。gydF4y2Ba
保存更改。gydF4y2Ba
如果你用虚拟子系统替换原子子系统,而模拟仍然失败,出现代数循环错误,请检查模型中的其中一个:gydF4y2Ba
代数约束gydF4y2Ba
一个不是由原子子系统引起的人工代数循环gydF4y2Ba
一些型号一起捆绑信号。即使不存在代数约束,这种捆绑可能导致Simuli金宝appnk检测代数循环。如果重定向一个或多个信号,则可以删除人工代数循环。gydF4y2Ba
在这个例子中,线性化gydF4y2Ba模型gydF4y2Ba模拟由单个泵馈送的双罐系统的动态。在此模型中:gydF4y2Ba
输出gydF4y2Ba第一季度gydF4y2Ba
是流体流入泵中的流体速率。gydF4y2Ba
输出gydF4y2Bah2gydF4y2Ba
是第二个容器中液体的高度。gydF4y2Ba
的gydF4y2Ba状态方程gydF4y2Ba块定义了储罐系统对泵运行的动态响应:gydF4y2Ba
State-Space块的输出是一个包含gydF4y2Ba第一季度gydF4y2Ba
和gydF4y2Bah2gydF4y2Ba
.gydF4y2Ba
如果你模拟了这个gydF4y2Ba模型gydF4y2Ba与gydF4y2Ba代数循环gydF4y2Ba参数设置为gydF4y2Ba警告gydF4y2Ba
或gydF4y2Ba错误gydF4y2Ba
,S金宝appimulink识别代数循环。gydF4y2Ba
为了消除这个代数循环:gydF4y2Ba
改变gydF4y2BaCgydF4y2Ba
和gydF4y2BaDgydF4y2Ba
矩阵如下:gydF4y2Ba
通过gydF4y2Ba第一季度gydF4y2Ba
直接到范围而不是通过状态空间块。gydF4y2Ba
现在输入(gydF4y2Ba第一季度gydF4y2Ba
)不会直接传递给输出gydF4y2BaDgydF4y2Ba
矩阵为0),因此状态空间块不再具有直接馈通。反馈信号现在只有一个元素,因此选择块不再需要,如下所示gydF4y2Ba模型gydF4y2Ba.gydF4y2Ba
当你认为你的模型有一个人工代数循环时,有两个参数需要考虑:gydF4y2Ba
最小化代数循环的发生gydF4y2Baparameter -指定Simulink尝试消除金宝app任何人工代数循环:gydF4y2Ba
原子子系统 - 在子系统参数对话框中,选择gydF4y2Ba最小化代数循环的发生gydF4y2Ba.gydF4y2Ba
模型块-对于引用的模型,在gydF4y2Ba模型参考gydF4y2Ba窗格中,选择gydF4y2Ba最小化代数循环的发生gydF4y2Ba.gydF4y2Ba
最小化代数循环gydF4y2Ba参数-指定Simulink在金宝appgydF4y2Ba最小化代数循环的发生gydF4y2Ba参数没有效果。gydF4y2Ba
的gydF4y2Ba最小化代数循环gydF4y2Ba参数中的gydF4y2Ba诊断gydF4y2Ba配置参数窗格。此参数的诊断操作是:gydF4y2Ba
设置gydF4y2Ba | 模拟反应gydF4y2Ba |
---|---|
没有一个gydF4y2Ba |
金宝appSimulink不采取任何行动。gydF4y2Ba |
警告gydF4y2Ba |
金宝appSimulink显示一个警告gydF4y2Ba最小化代数循环的发生gydF4y2Ba参数没有效果。gydF4y2Ba |
错误gydF4y2Ba |
金宝appSimulink终止模拟并显示错误gydF4y2Ba最小化代数循环的发生gydF4y2Ba参数没有效果。gydF4y2Ba |
当你启用gydF4y2Ba块减少gydF4y2Ba在模型配置参数优化中,Simulink将某些组块分解为一个单独的、更有效的块,或完全删除它们。金宝app启用块减少可以在模型模拟期间和生成代码时更快地执行。gydF4y2Ba
启用块减少还可以帮助Simulink解决人工代数环。金宝appgydF4y2Ba
考虑以下示例gydF4y2Ba模型gydF4y2Ba.gydF4y2Ba
最初,块缩减是关闭的。当你模拟这个的时候gydF4y2Ba模型gydF4y2Ba,原子单元子系统和增益和比较常数块是Simulink无法解决的代数循环的一部分。金宝appgydF4y2Ba
如果您启用区块缩减和排序顺序,并重新模拟该模型,那么Simulink将不会显示已缩减的区块的排序顺序。金宝app你现在可以快速看到哪些方块被减少了。gydF4y2Ba
从模型中消除了与常量和增益块的比较,因此它们不再生成代数循环错误。原子单位子系统会产生警告:gydF4y2Ba
警告:如果子系统'ex_aloop_block_reduction_errwarn/ Atomic Unit'的导入'ex_aloop_block_reduction_errwarn/ Atomic Unit'涉及直接反馈,则存在代数循环,Simulink无法删除。金宝app考虑清除“最小化代数循环出现次数”参数以避免此警告。gydF4y2Ba
使用总线选择器块只将所需的信号传递到原子子系统。gydF4y2Ba
当你启用时gydF4y2Ba最小化代数循环的发生gydF4y2Ba, 金宝appSimulink试图消除人工代数循环。在这个例子中gydF4y2Ba模型gydF4y2Ba包含引起人工代数循环的原子子系统。gydF4y2Ba
原子子系统的内容不是直接馈通,但是Simulink将原子子系统标识为直接馈通。金宝appgydF4y2Ba
如果是gydF4y2Ba代数循环gydF4y2Ba诊断设置为gydF4y2Ba错误gydF4y2Ba
,模拟模型会导致一个错误,因为模型包含一个涉及其原子子系统的人工代数循环。gydF4y2Ba
为了消除这个代数循环,gydF4y2Ba
使用引起人工代数循环的原子子系统,根据前面的图形创建模型。gydF4y2Ba
在gydF4y2Ba诊断gydF4y2Ba“模型配置参数”窗格中,设置gydF4y2Ba代数循环gydF4y2Ba参数到gydF4y2Ba警告gydF4y2Ba
或gydF4y2Ba没有一个gydF4y2Ba
.gydF4y2Ba
在gydF4y2Ba数据导入/导出gydF4y2Ba窗格,确保gydF4y2Ba信号记录gydF4y2Ba参数被禁用。如果启用了信号日志记录,则Simulink无法消除人工代数循金宝app环。gydF4y2Ba
要显示该模型和原子子系统的排序顺序,请选择gydF4y2Ba展示gydF4y2Ba>gydF4y2Ba块gydF4y2Ba>gydF4y2Ba执行顺序排序gydF4y2Ba.gydF4y2Ba
查看排序的订单可以帮助您了解如何消除人工代数循环。gydF4y2Ba
子系统中的所有块都在同一级别执行:(0是最低层,表示要执行的第一个块。)gydF4y2Ba
有关排序顺序的详细信息,请参见gydF4y2Ba控制并显示排序顺序gydF4y2Ba.gydF4y2Ba
在顶级模型中gydF4y2Ba子系统参数gydF4y2Ba对话框中,选择gydF4y2Ba最小化代数循环的发生gydF4y2Ba.这个参数指导Simulink在模拟模型时尝试消金宝app除包含原子子系统的代数循环。保存更改。gydF4y2Ba
点击gydF4y2Ba模拟gydF4y2Ba>gydF4y2Ba更新图gydF4y2Ba重新计算排序后的顺序。gydF4y2Ba
现在在子系统内部有两层排序顺序:1和2。gydF4y2Ba
为了消除人工代数回路,Simulink尝试使子系统或参考模型的输入非直接馈通。金宝appgydF4y2Ba
当你模拟一个模型时,所有的块都按照这个顺序执行方法:gydF4y2Ba
mdloutputs.gydF4y2Ba
mdlDerivativesgydF4y2Ba
mdlUpdategydF4y2Ba
在这个的原始版本中gydF4y2Ba模型gydF4y2Ba,执行gydF4y2Bamdloutputs.gydF4y2Ba
方法从工厂块开始,因为植物块是非直接馈通。执行使用控制器块完成。gydF4y2Ba
有关这些方法的更多信息,请参阅gydF4y2Ba块的方法gydF4y2Ba.gydF4y2Ba
如果你启用gydF4y2Ba最小化代数循环的发生gydF4y2Ba参数的原子子系统,Simulink将子系统分为两个原子单元。金宝appgydF4y2Ba
以下条件为真:gydF4y2Ba
原子单元2不是直接馈通的。gydF4y2Ba
原子单位1只有agydF4y2Bamdloutputs.gydF4y2Ba
方法。gydF4y2Ba
只有gydF4y2BamdlDerivativesgydF4y2Ba
或gydF4y2BamdlUpdategydF4y2Ba
原子单元2的方法需要原子单元的输出1. Simulink可以执行通常将在中的情况下执行金宝appgydF4y2BamdlOutputgydF4y2Ba
原子单元1的方法gydF4y2BamdlDerivativesgydF4y2Ba
原子单元2的方法。gydF4y2Ba
模型的新执行顺序是:gydF4y2Ba
mdloutputs.gydF4y2Ba
模型的方法gydF4y2Ba
mdloutputs.gydF4y2Ba
原子单元2的方法gydF4y2Ba
mdloutputs.gydF4y2Ba
其他块的方法gydF4y2Ba
mdlDerivativesgydF4y2Ba
模型的方法gydF4y2Ba
mdloutputs.gydF4y2Ba
原子单元1的方法1gydF4y2Ba
mdlDerivativesgydF4y2Ba
原子单元2的方法gydF4y2Ba
mdlDerivativesgydF4y2Ba
其他块的方法gydF4y2Ba
为gydF4y2Ba最小化代数循环的发生gydF4y2Ba技术要成功,子系统或参考模型必须有一个直接连接到导入的非直接馈通块。金宝app然后Simulink可以设置gydF4y2BaDirectFeedthroughgydF4y2Ba
块的属性gydF4y2Ba错误的gydF4y2Ba
指示输入端口没有直接馈通。gydF4y2Ba
设置gydF4y2Ba最小化代数循环的发生gydF4y2Ba参数并不总是有效。金宝appSimulink不能改变gydF4y2BaDirectFeedthroughgydF4y2Ba
如果Inport仅通过直接馈通块连接到Outport,则Inport的属性。gydF4y2Ba
在这个gydF4y2Ba模型gydF4y2Ba,子系统工厂+控制器导致代数循环,但它具有额外的增益块和额外的输出。gydF4y2Ba
金宝appSimulink无法移动gydF4y2Bamdloutputs.gydF4y2Ba
方法的gydF4y2BamdlDerivativegydF4y2Ba
因为原子子系统的输出依赖于Controller块的输出。你不能使子系统非直接馈通。gydF4y2Ba
您可以修改此模型,通过添加额外的import和Gain块来重新定义原子子系统,从而消除人工代数循环,如您在gydF4y2Ba模型gydF4y2Ba这里。这样做使得In1非直接馈通和In2直接馈通,从而打破代数环。gydF4y2Ba
对于具有代数循环的大型模型采用以下设计技术:gydF4y2Ba
避免创建包含不连续或非双精度数据类型的循环。Simu金宝applink代数循环求解器是基于梯度的,必须高精度地求解代数约束。gydF4y2Ba
开发一个清晰地识别原子子系统为直接馈通或非直接馈通的方案。使用可视化方案,如给块着色或定义块命名约定。gydF4y2Ba
如果您计划为您的模型生成代码,则启用gydF4y2Ba最小化代数循环的发生gydF4y2Ba所有原子子系统的参数。如果可能的话,确保原子子系统的输入端口直接连接到非直接馈通块。gydF4y2Ba
避免组合非直接馈通和直接馈通路径使用gydF4y2Ba总线的创造者gydF4y2Ba或gydF4y2BaMuxgydF4y2Ba块。金宝appSimulink可能无法消除任何由此产生的人工代数循环。相反,考虑在单独的子系统中集群非直接馈通和直接馈通对象。gydF4y2Ba
使用总线选择器块只将所需的信号传递到原子子系统。gydF4y2Ba
当一个gydF4y2Ba模型gydF4y2Ba块是循环的一部分,块是直接通过块,一个代数循环可以产生。模型中的代数循环不一定是错误,但它可以给出意想不到的结果。看:gydF4y2Ba
在模型中突出显示代数循环gydF4y2Ba有关查看标记循环的信息。gydF4y2Ba
显示代数循环信息gydF4y2Ba有关在调试器中跟踪代数循环的信息。gydF4y2Ba
的gydF4y2Ba型号配置参数:诊断gydF4y2Ba窗格gydF4y2Ba代数循环gydF4y2Ba自动检测代数循环信息的选项。gydF4y2Ba
一个gydF4y2Ba模型gydF4y2Ba由于引用模型的结构,块可以是直接馈通块。当直接通过子模型结构的结果,并导致一个不必要的代数循环,你可以:gydF4y2Ba
自动消除代数循环使用的技术描述在:gydF4y2Ba
手动插入编号gydF4y2Ba单位延迟gydF4y2Ba块需要打破代数循环。gydF4y2Ba
通用实时(gydF4y2BagrgydF4y2Ba
)和嵌入实时(gydF4y2Ba导gydF4y2Ba
)的目标提供gydF4y2Ba单输出/更新功能gydF4y2Ba选择在gydF4y2Ba配置参数gydF4y2Ba对话。此选项控制生成的代码是否具有单独的输出和更新功能,或组合输出/更新功能。看:gydF4y2Ba
入口点功能和调度gydF4y2Ba(金宝appSimulink Coder)的单独和组合输出和更新函数的信息。gydF4y2Ba
单输出/更新功能gydF4y2Ba(金宝appSimulink Coder),以获取有关指定代码具有独立函数还是组合函数的信息。gydF4y2Ba
当gydF4y2Ba单输出/更新功能gydF4y2Ba时,模型块具有组合输出/更新功能。该函数使块成为所有导入的直接馈通块,而不管所引用模型的结构如何。如果出现不需要的代数循环,可以:gydF4y2Ba
禁用gydF4y2Ba单输出/更新功能gydF4y2Ba.然后,Model块的代码有单独的输出和更新函数,从而消除了直接馈通和代数循环。gydF4y2Ba
自动消除代数循环使用的技术描述在:gydF4y2Ba
手动插入一个或多个gydF4y2Ba单位延迟gydF4y2Ba块需要打破代数循环。gydF4y2Ba
在仿真的更新阶段,Simulink确定块方法的仿真执行顺序。金宝app此块调用顺序为gydF4y2Ba排序订单gydF4y2Ba.gydF4y2Ba
如果您为非虚拟块分配优先级,以向Simulink表明它们相对于其他块的执行顺序,则代数循环求解器在尝试解决任何代数循环时不金宝app会尊重这些优先级。gydF4y2Ba
解决者gydF4y2Ba|gydF4y2Ba零交叉检测gydF4y2Ba
[gydF4y2Ba1gydF4y2Ba]gydF4y2Ba香品,劳伦斯·F, m·w·雷切特和j·a·基尔赞卡"在MATLAB和Simulink中求解Index-1 DAEs。金宝appgydF4y2Ba暹罗评论。gydF4y2Ba研究概述,第三,1999年,pp.538 - 552。gydF4y2Ba
[gydF4y2Ba2gydF4y2Ba]gydF4y2Ba更多,j,狗屁Garbow, K.E.Hillstrom。gydF4y2BaMINPACK-1的用户指南gydF4y2Ba.阿贡,IL:阿贡国家实验室,1980。gydF4y2Ba
[gydF4y2Ba3.gydF4y2Ba]gydF4y2BaRabinowitz,菲利普。gydF4y2Ba非线性代数方程的数值方法gydF4y2BaGordon和Breach Science Publishers, 1970年。gydF4y2Ba