文档gydF4y2Ba

代数循环gydF4y2Ba

什么是代数循环?gydF4y2Ba

在仿真软件金宝appgydF4y2Ba®gydF4y2Ba模型中,一个gydF4y2Ba代数循环gydF4y2Ba当信号环路中只有直接馈通块时发生。gydF4y2Ba直接喂养gydF4y2Ba表示块输出取决于输入端口的值;输入的值直接控制输出的值。gydF4y2Ba

有些块有直接馈通的输入端口。金宝appSimulink无法计算这些块的输出,如果不知道在当前时间步长在这些输入端口进入块的信号的值。gydF4y2Ba

一些带有直接馈通输入的区块示例如下:gydF4y2Ba

间接直通的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

代数循环的解释gydF4y2Ba

数学解释gydF4y2Ba

金宝appSimulink包含一套用于模拟的数值求解器gydF4y2Ba常微分方程gydF4y2Ba,这些方程组可以写成gydF4y2Ba

xgydF4y2Ba ˙gydF4y2Ba =gydF4y2Ba fgydF4y2Ba (gydF4y2Ba xgydF4y2Ba ,gydF4y2Ba tgydF4y2Ba )gydF4y2Ba ,gydF4y2Ba

地点:gydF4y2Ba

  • xgydF4y2Ba是国家矢量。gydF4y2Ba

  • tgydF4y2Ba为独立时间变量。gydF4y2Ba

一些等式系统包含涉及独立变量和状态向量的附加约束,而不是状态向量的衍生物。这些系统是gydF4y2Ba差分代数方程(Daes)gydF4y2Ba,而不是常微分方程。gydF4y2Ba

这个词gydF4y2Ba代数gydF4y2Ba指的是不包含任何导数的方程。可以用半显式形式表示工程中出现的daegydF4y2Ba

xgydF4y2Ba ˙gydF4y2Ba =gydF4y2Ba fgydF4y2Ba (gydF4y2Ba xgydF4y2Ba ,gydF4y2Ba xgydF4y2Ba 一个gydF4y2Ba ,gydF4y2Ba tgydF4y2Ba )gydF4y2Ba 0gydF4y2Ba =gydF4y2Ba ggydF4y2Ba (gydF4y2Ba xgydF4y2Ba ,gydF4y2Ba xgydF4y2Ba 一个gydF4y2Ba ,gydF4y2Ba tgydF4y2Ba )gydF4y2Ba ,gydF4y2Ba

地点:gydF4y2Ba

  • fgydF4y2Ba和gydF4y2BaggydF4y2Ba可以是矢量函数。gydF4y2Ba

  • 第一个方程是微分方程。gydF4y2Ba

  • 第二等式是代数方程。gydF4y2Ba

  • 微分变量的向量是gydF4y2BaxgydF4y2Ba.gydF4y2Ba

  • 代数变量的向量为gydF4y2BaxgydF4y2Ba一个gydF4y2Ba.gydF4y2Ba

在Si金宝appmulink模型中,代数循环是代数约束。带代数循环的模型定义了差分代数方程的系统。金宝appSimulink不会直接解决Daes。金宝appSimulink以数字方式解决代数方程(代数循环)gydF4y2BaxgydF4y2Ba一个gydF4y2Ba在颂歌求解器的每个步骤。gydF4y2Ba

的gydF4y2Ba模型gydF4y2Ba图中等价于此半显式方程组:gydF4y2Ba

xgydF4y2Ba ˙gydF4y2Ba =gydF4y2Ba fgydF4y2Ba (gydF4y2Ba xgydF4y2Ba ,gydF4y2Ba xgydF4y2Ba 一个gydF4y2Ba ,gydF4y2Ba tgydF4y2Ba )gydF4y2Ba =gydF4y2Ba xgydF4y2Ba 一个gydF4y2Ba 0gydF4y2Ba =gydF4y2Ba ggydF4y2Ba (gydF4y2Ba xgydF4y2Ba ,gydF4y2Ba xgydF4y2Ba 一个gydF4y2Ba ,gydF4y2Ba tgydF4y2Ba )gydF4y2Ba =gydF4y2Ba -gydF4y2Ba xgydF4y2Ba +gydF4y2Ba ugydF4y2Ba -gydF4y2Ba 2gydF4y2Ba xgydF4y2Ba 一个gydF4y2Ba .gydF4y2Ba

在ODE求解器的每一步,代数循环求解器都必须求解的代数约束gydF4y2BaxgydF4y2Ba一个gydF4y2Ba在计算导数之前gydF4y2Ba xgydF4y2Ba ˙gydF4y2Ba .gydF4y2Ba

物理解释gydF4y2Ba

代数约束:gydF4y2Ba

  • 在物理系统建模时发生,通常是由于守恒定律,如质量和能量守恒gydF4y2Ba

  • 当您为模型选择一个特定的坐标系时发生gydF4y2Ba

  • 帮助在动态系统中对系统响应施加设计约束gydF4y2Ba

使用Simscape™来模型系统,跨越机械,电气,液压和其他物理域作为物理网络。Simscape构造了表征模型行为的daes。该软件将这些方程与模型的其余部分集成,然后直接解决Daes。金宝appSimulink同时解决不同物理域中的组件的变量,避免了代数循环的问题。gydF4y2Ba

什么是人工代数循环?gydF4y2Ba

一个gydF4y2Ba人工代数循环gydF4y2Ba当原子子系统或模型块导致Simulink检测代数循环时发生,即使子系统的内容不包含代数约束。金宝app当您创建原子子系统时,所有的import块都是直接馈通的,从而导致一个代数循环。gydF4y2Ba

一个人工代数循环的例子gydF4y2Ba

从这开始gydF4y2Ba模型gydF4y2Ba,它不包含代数循环。它模拟无误。gydF4y2Ba

  1. 将Controller和Plant模块封装在一个子系统中。gydF4y2Ba

  2. 在“子系统块”对话框中,选择gydF4y2Ba当作原子单位对待gydF4y2Ba制作子系统原子。gydF4y2Ba

  3. 在gydF4y2Ba诊断gydF4y2Ba“模型配置参数”窗格中,设置gydF4y2Ba代数循环gydF4y2Ba参数到gydF4y2Ba错误gydF4y2Ba.gydF4y2Ba

当模拟gydF4y2Ba模型gydF4y2Ba,一个代数循环发生,因为子系统是直接馈通的,即使原子子系统中的路径不是直接馈通的。模拟因代数循环错误而停止。gydF4y2Ba

为什么代数循环是不可取的gydF4y2Ba

如果你的模型包含一个代数循环:gydF4y2Ba

  • 您不能为模型生成代码。gydF4y2Ba

  • Simu金宝applink代数循环求解器可能无法求解代数循环。gydF4y2Ba

  • 当Simul金宝appink试图解决代数循环时,仿真执行得很慢。gydF4y2Ba

    对于大多数模型,代数环路求解器在第一次进行计算地昂贵。金宝appSimulink迅速解决了随后的时间步长,因为一个良好的起点gydF4y2BaxgydF4y2Ba一个gydF4y2Ba可从前一步步提供。gydF4y2Ba

识别模型中的代数循环gydF4y2Ba

使用这些技术在你的模型中搜索代数循环:gydF4y2Ba

在模型中突出显示代数循环gydF4y2Ba

使用gydF4y2BagetAlgebraicloops.gydF4y2Ba来识别模型中的代数循环,并在Simulink编辑器中突出显示它们。金宝app用这种方法:gydF4y2Ba

  • 您可以遍历多个模型层次结构来定位代数循环。gydF4y2Ba

  • 你可以识别实数和人工代数循环。gydF4y2Ba

  • 您可以同时可视化模型中的所有循环。gydF4y2Ba

  • 您不需要在界限上进出模型。gydF4y2Ba

  • 您无需以串行顺序检测循环。此外,您无需每次检测到循环时都要编译模型。因此,您可以快速解决循环。gydF4y2Ba

在整个模型上执行代数循环高亮显示,而不是在特定的子系统上。gydF4y2Ba

  1. 打开模型。gydF4y2Ba

  2. 在gydF4y2Ba诊断gydF4y2Ba“模型配置参数”窗格,设置gydF4y2Ba代数循环gydF4y2Ba到gydF4y2Ba没有一个gydF4y2Ba或gydF4y2Ba警告gydF4y2Ba.将此参数设置为gydF4y2Ba错误gydF4y2Ba防止模型编译。gydF4y2Ba

  3. 编译模型时不带任何错误。在突出显示任何代数循环之前,必须先编译模型。gydF4y2Ba

  4. 在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

使用代数循环诊断gydF4y2Ba

金宝appSimulink在仿真初始化期间检测代数循环,例如,当您更新图表时。您可以设置gydF4y2Ba代数循环gydF4y2Ba诊断报告错误或警告,如果软件检测到任何代数循环在您的模型。gydF4y2Ba

在gydF4y2Ba诊断gydF4y2Ba模型配置参数的窗格,设置gydF4y2Ba代数循环gydF4y2Ba参数。gydF4y2Ba

设置gydF4y2Ba 模拟反应gydF4y2Ba
没有一个gydF4y2Ba

金宝appSimulink试图解决代数循环;仅在代数循环无法解决时报告错误。gydF4y2Ba

警告gydF4y2Ba

代数循环会产生警告。金宝appSimulink试图解决代数循环;仅在代数循环无法解决时报告错误。gydF4y2Ba

错误gydF4y2Ba

代数循环停止初始化。在Simulink尝试解决循环之前,手动检查循环。金宝appgydF4y2Ba

此示例显示如何使用代数循环诊断突出显示代数循环gydF4y2Basldemo_hydcylgydF4y2Ba模型。gydF4y2Ba

  1. 打开gydF4y2Basldemo_hydcylgydF4y2Ba模型。gydF4y2Ba

  2. 在gydF4y2Ba诊断gydF4y2Ba模型配置参数的窗格,设置gydF4y2Ba代数循环gydF4y2Ba参数到gydF4y2Ba错误gydF4y2Ba.gydF4y2Ba

  3. 模拟模型。gydF4y2Ba

    当Simu金宝applink在初始化期间检测到代数循环时,模拟停止。诊断查看器显示错误消息,并列出模型中的所有块,这些块是该代数循环的一部分。gydF4y2Ba

    在模型中,红色高亮显示组成循环的块和信号。gydF4y2Ba

  4. 关闭诊断查看器以删除突出显示。gydF4y2Ba

  5. 关闭gydF4y2Basldemo_hydcylgydF4y2Ba模型。不要保存更改。gydF4y2Ba

使用Ashow Debugger命令gydF4y2Ba

使用gydF4y2Ba的演出gydF4y2Ba命令在Simulink调试器中金宝app突出显示代数循环并逐步通过仿真。gydF4y2Ba

  1. 打开gydF4y2Basldemo_hydcylgydF4y2Ba模型。gydF4y2Ba

    默认情况下,gydF4y2Ba代数循环gydF4y2Ba参数设置为gydF4y2Ba没有一个gydF4y2Ba.gydF4y2Ba

  2. 启动Simulink金宝app调试器。选择gydF4y2Ba模拟gydF4y2Ba>gydF4y2Ba调试gydF4y2Ba>gydF4y2Ba调试模式gydF4y2Ba.gydF4y2Ba

    运行调试器。gydF4y2Ba

  3. 在MATLAB命令提示符中,输入:gydF4y2Ba

    的演出gydF4y2Ba

    该命令返回代数循环gydF4y2Basldemo_hydcylgydF4y2Ba以及循环中的块数。gydF4y2Ba

    找到1代数循环:系统编号#代数循环ID,循环中的块数 -  0#1,9块循环gydF4y2Ba
  4. 要在此代数循环中列出块,请在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

如何处理模型中的代数循环gydF4y2Ba

如果S金宝appimulink在你的模型中报告了一个代数循环,代数循环求解器可能能够解决这个循环。如果S金宝appimulink不能解决这个循环,有几种方法可以消除这个循环。gydF4y2Ba

使用此工作流程决定如何消除代数循环。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

代数循环求解器中的信任区域和线路搜索算法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

代数循环求解器的局限性gydF4y2Ba

代数环求解是一种迭代过程。只有当代金宝app数循环收敛到明确的答案时,Simulink代数循环求解器才能成功。当循环无法收敛或收敛太慢时,模拟退出错误。gydF4y2Ba

代数循环求解器无法解决包含以下任何一种的代数循环:gydF4y2Ba

  • 具有离散值输出的块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

手动求解代数循环gydF4y2Ba

如果S金宝appimulink无法解决代数循环,则软件会报告错误。使用这些技术之一来手动解决循环:gydF4y2Ba

  • 使用诸如坐标的区分或更改等技术重构底层dae。这些技术将dae以一种更易于代数循环求解器求解的形式进行。gydF4y2Ba

  • 将Daes转换为ODES,消除任何代数循环。gydF4y2Ba

  • 使用IC和代数约束块创建初始猜测gydF4y2Ba

使用IC和代数约束块创建初始猜测。gydF4y2Ba您的模型可能包含循环求解器不能在没有良好的初始猜测的情况下收敛的循环。您可以为代数状态变量指定初始猜测,但仅在您认为循环合法时才使用此技术。gydF4y2Ba

有两种方法可以指定初始猜测:gydF4y2Ba

消除人工代数循环gydF4y2Ba

使用这些技术来消除模型中的人工代数循环:gydF4y2Ba

消除由原子子系统引起的人工代数循环gydF4y2Ba

如果原子子系统引起人工代数循环,则将原子子系统转换为虚拟子系统。此更改对模型的行为没有影响。当子系统是原子的并且你模拟模型时,Simulink调用代数循环求解器。金宝app求解器在一次迭代后终止。代数循环是自动解决的,因为没有代数常数。使子系统虚拟后,Simulink在模拟期间不会调用代数循环求解器。金宝appgydF4y2Ba

将原子子系统转换为虚拟子系统:gydF4y2Ba

  1. 打开包含原子子系统的模型。gydF4y2Ba

  2. 右键单击原子子系统并选择gydF4y2Ba子系统参数gydF4y2Ba.gydF4y2Ba

  3. 清除gydF4y2Ba当作原子单位对待gydF4y2Ba参数。gydF4y2Ba

  4. 保存更改。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

  1. 改变gydF4y2BaCgydF4y2Ba和gydF4y2BaDgydF4y2Ba矩阵如下:gydF4y2Ba

  2. 通过gydF4y2Ba第一季度gydF4y2Ba直接到范围而不是通过状态空间块。gydF4y2Ba

    现在输入(gydF4y2Ba第一季度gydF4y2Ba)不会直接传递给输出gydF4y2BaDgydF4y2Ba矩阵为0),因此状态空间块不再具有直接馈通。反馈信号现在只有一个元素,因此选择块不再需要,如下所示gydF4y2Ba模型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块减少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金宝app消除人工代数循环gydF4y2Ba

当你启用时gydF4y2Ba最小化代数循环的发生gydF4y2Ba, 金宝appSimulink试图消除人工代数循环。在这个例子中gydF4y2Ba模型gydF4y2Ba包含引起人工代数循环的原子子系统。gydF4y2Ba

原子子系统的内容不是直接馈通,但是Simulink将原子子系统标识为直接馈通。金宝appgydF4y2Ba

如果是gydF4y2Ba代数循环gydF4y2Ba诊断设置为gydF4y2Ba错误gydF4y2Ba,模拟模型会导致一个错误,因为模型包含一个涉及其原子子系统的人工代数循环。gydF4y2Ba

为了消除这个代数循环,gydF4y2Ba

  1. 使用引起人工代数循环的原子子系统,根据前面的图形创建模型。gydF4y2Ba

  2. 在gydF4y2Ba诊断gydF4y2Ba“模型配置参数”窗格中,设置gydF4y2Ba代数循环gydF4y2Ba参数到gydF4y2Ba警告gydF4y2Ba或gydF4y2Ba没有一个gydF4y2Ba.gydF4y2Ba

  3. 在gydF4y2Ba数据导入/导出gydF4y2Ba窗格,确保gydF4y2Ba信号记录gydF4y2Ba参数被禁用。如果启用了信号日志记录,则Simulink无法消除人工代数循金宝app环。gydF4y2Ba

  4. 要显示该模型和原子子系统的排序顺序,请选择gydF4y2Ba展示gydF4y2Ba>gydF4y2Ba块gydF4y2Ba>gydF4y2Ba执行顺序排序gydF4y2Ba.gydF4y2Ba

    查看排序的订单可以帮助您了解如何消除人工代数循环。gydF4y2Ba

    子系统中的所有块都在同一级别执行:(0是最低层,表示要执行的第一个块。)gydF4y2Ba

    请注意gydF4y2Ba

    有关排序顺序的详细信息,请参见gydF4y2Ba控制并显示排序顺序gydF4y2Ba.gydF4y2Ba

  5. 在顶级模型中gydF4y2Ba子系统参数gydF4y2Ba对话框中,选择gydF4y2Ba最小化代数循环的发生gydF4y2Ba.这个参数指导Simulink在模拟模型时尝试消金宝app除包含原子子系统的代数循环。保存更改。gydF4y2Ba

  6. 点击gydF4y2Ba模拟gydF4y2Ba>gydF4y2Ba更新图gydF4y2Ba重新计算排序后的顺序。gydF4y2Ba

    现在在子系统内部有两层排序顺序:1和2。gydF4y2Ba

为了消除人工代数回路,Simulink尝试使子系统或参考模型的输入非直接馈通。金宝appgydF4y2Ba

当你模拟一个模型时,所有的块都按照这个顺序执行方法:gydF4y2Ba

  1. mdloutputs.gydF4y2Ba

  2. mdlDerivativesgydF4y2Ba

  3. mdlUpdategydF4y2Ba

在这个的原始版本中gydF4y2Ba模型gydF4y2Ba,执行gydF4y2Bamdloutputs.gydF4y2Ba方法从工厂块开始,因为植物块是非直接馈通。执行使用控制器块完成。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

  1. mdloutputs.gydF4y2Ba模型的方法gydF4y2Ba

    1. mdloutputs.gydF4y2Ba原子单元2的方法gydF4y2Ba

    2. mdloutputs.gydF4y2Ba其他块的方法gydF4y2Ba

  2. mdlDerivativesgydF4y2Ba模型的方法gydF4y2Ba

    1. mdloutputs.gydF4y2Ba原子单元1的方法1gydF4y2Ba

    2. mdlDerivativesgydF4y2Ba原子单元2的方法gydF4y2Ba

    3. mdlDerivativesgydF4y2Ba其他块的方法gydF4y2Ba

为gydF4y2Ba最小化代数循环的发生gydF4y2Ba技术要成功,子系统或参考模型必须有一个直接连接到导入的非直接馈通块。金宝app然后Simulink可以设置gydF4y2BaDirectFeedthroughgydF4y2Ba块的属性gydF4y2Ba错误的gydF4y2Ba指示输入端口没有直接馈通。gydF4y2Ba

当gydF4y2Ba金宝app不能消除人工代数循环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

对于具有代数循环的大型模型采用以下设计技术:gydF4y2Ba

  • 避免创建包含不连续或非双精度数据类型的循环。Simu金宝applink代数循环求解器是基于梯度的,必须高精度地求解代数约束。gydF4y2Ba

  • 开发一个清晰地识别原子子系统为直接馈通或非直接馈通的方案。使用可视化方案,如给块着色或定义块命名约定。gydF4y2Ba

  • 如果您计划为您的模型生成代码,则启用gydF4y2Ba最小化代数循环的发生gydF4y2Ba所有原子子系统的参数。如果可能的话,确保原子子系统的输入端口直接连接到非直接馈通块。gydF4y2Ba

  • 避免组合非直接馈通和直接馈通路径使用gydF4y2Ba总线的创造者gydF4y2Ba或gydF4y2BaMuxgydF4y2Ba块。金宝appSimulink可能无法消除任何由此产生的人工代数循环。相反,考虑在单独的子系统中集群非直接馈通和直接馈通对象。gydF4y2Ba

    使用总线选择器块只将所需的信号传递到原子子系统。gydF4y2Ba

模型块和直接馈通gydF4y2Ba

当一个gydF4y2Ba模型gydF4y2Ba块是循环的一部分,块是直接通过块,一个代数循环可以产生。模型中的代数循环不一定是错误,但它可以给出意想不到的结果。看:gydF4y2Ba

子模型结构引起的直接模型块馈通gydF4y2Ba

一个gydF4y2Ba模型gydF4y2Ba由于引用模型的结构,块可以是直接馈通块。当直接通过子模型结构的结果,并导致一个不必要的代数循环,你可以:gydF4y2Ba

由模型配置引起的直接模型块馈通gydF4y2Ba

通用实时(gydF4y2BagrgydF4y2Ba)和嵌入实时(gydF4y2Ba导gydF4y2Ba)的目标提供gydF4y2Ba单输出/更新功能gydF4y2Ba选择在gydF4y2Ba配置参数gydF4y2Ba对话。此选项控制生成的代码是否具有单独的输出和更新功能,或组合输出/更新功能。看:gydF4y2Ba

当gydF4y2Ba单输出/更新功能gydF4y2Ba时,模型块具有组合输出/更新功能。该函数使块成为所有导入的直接馈通块,而不管所引用模型的结构如何。如果出现不需要的代数循环,可以:gydF4y2Ba

使用代数循环求解器时更改块优先级gydF4y2Ba

在仿真的更新阶段,Simulink确定块方法的仿真执行顺序。金宝app此块调用顺序为gydF4y2Ba排序订单gydF4y2Ba.gydF4y2Ba

如果您为非虚拟块分配优先级,以向Simulink表明它们相对于其他块的执行顺序,则代数循环求解器在尝试解决任何代数循环时不金宝app会尊重这些优先级。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

这个话题有用吗?gydF4y2Ba