主要内容gydF4y2Ba

代数循环概念gydF4y2Ba

在仿真软件金宝appgydF4y2Ba®gydF4y2Ba模型中,一个gydF4y2Ba代数循环gydF4y2Ba当信号循环存在于循环内的直接馈通块时出现。gydF4y2Ba直接引线gydF4y2Ba意味着Simulink金宝app需要块的输入信号的值来计算当前时间步骤的输出。这种信号循环在同一时间步骤中创建块输出和输入的圆形依赖性。这导致在每个时间步骤中求解的代数方程,将计算成本添加到模拟中。gydF4y2Ba

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

间接直通的gydF4y2Ba块维护State变量。两个例子是gydF4y2Ba积分商gydF4y2Ba和gydF4y2Ba单位延迟gydF4y2Ba.gydF4y2Ba

提示gydF4y2Ba

若要确定一个块是否具有直接馈通,请读取gydF4y2Ba特征gydF4y2Ba块引用页的一部分。gydF4y2Ba

图中显示了一个代数循环的例子。的gydF4y2Ba总和gydF4y2BaBlock是一个代数变量gydF4y2BaxgydF4y2Ba一个gydF4y2Ba它被限制为等于第一个输入gydF4y2BaugydF4y2Ba-gydF4y2BaxgydF4y2Ba一个gydF4y2Ba(例如,gydF4y2BaxgydF4y2Ba一个gydF4y2Ba=gydF4y2BaugydF4y2Ba- - - - - -gydF4y2BaxgydF4y2Ba一个gydF4y2Ba).gydF4y2Ba

这个简单循环的解决方案是gydF4y2BaxgydF4y2Ba一个gydF4y2Ba=gydF4y2BaugydF4y2Ba/ 2.gydF4y2Ba.gydF4y2Ba

数学解释gydF4y2Ba

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

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

在哪里gydF4y2BaxgydF4y2Ba状态向量是和吗gydF4y2BatgydF4y2Ba为独立时间变量。gydF4y2Ba

一些方程组包含包含自变量和状态向量的附加约束,但没有状态向量的导数。这样的系统被称为gydF4y2Ba微分代数方程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数值求解代数方程(代数循环)gydF4y2BaxgydF4y2Ba一个gydF4y2Ba在ODE求解器的每一步。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构建表征模型行为的dae。该软件将这些方程与模型的其余部分集成,然后直接求解DAEs。金宝appSimulink同时解决了不同物理域组件的变量,避免了代数循环的问题。gydF4y2Ba

人工代数循环gydF4y2Ba

一个gydF4y2Ba人工代数循环gydF4y2Ba发生在原子子系统或Model块导致Simulink检测代数循环时,即使子系统的内容不包含从输入到输出的直接反金宝app馈。当您创建一个原子子系统时,所有的Inport块都是直接馈通的,从而导致一个代数循环。gydF4y2Ba

从包含的模型开始,它代表了一个简单的比例控制所描述的电厂gydF4y2Ba

$$ G(s) = \frac{1}{s^2+2s+1}$$gydF4y2Ba

可以以状态空间形式重写为gydF4y2Ba

$ $ & # xA;左\点{x} = \ [& # xA;开始\{数组}{cc} & # xA;2 38 & #;1 \ \ & # xA; 1 & # 38;0 xA & #;结束\{数组}& # xA;正确\]& # xA; + \离开(& # xA; \开始{数组}{c} & # xA; 0 \ \ 1 & # xA;结束\{数组}& # xA; \右)& # xA; $ $gydF4y2Ba

左$ $ & # xA; y = \[开始\{数组}{cc} 0 & # 38; 1 \结束数组{}\]& # xA; $ $gydF4y2Ba

该系统既没有代数变量也没有直接馈通,也不包含代数循环。gydF4y2Ba

修改模型的步骤如下:gydF4y2Ba

  1. 将控制器块和工厂块封装在子系统中。gydF4y2Ba

  2. 在“子系统”对话框中选择gydF4y2Ba当作原子单位gydF4y2Ba使子系统原子化。gydF4y2Ba

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

在模拟这个模型时,由于子系统是直接馈通的,所以会发生代数循环,即使原子子系统中的路径不是直接馈通的。模拟结束与代数循环错误。gydF4y2Ba

代数回路求解器如何工作gydF4y2Ba

当一个模型包含代数循环时,Simulink在每个时间步使用一个非线性求解器来求解代金宝app数循环。求解器执行迭代来确定代数约束的解,如果有一个。因此,带有代数循环的模型比没有代数循环的模型运行得更慢。gydF4y2Ba

金宝appSimulink使用狗腿信赖域算法来解决代数循环。所使用的公差小于ODE求解器gydF4y2BaReltolgydF4y2Ba和gydF4y2BaAbstolgydF4y2Ba.这是因为Simulink使用“显金宝app式ode方法”来解决索引-1差分代数方程(DAE)。gydF4y2Ba

为了让代数回路求解器工作,gydF4y2Ba

  • 必须有一个块,在那里循环求解器可以打破循环并尝试解决循环。gydF4y2Ba

  • 模型应该有真实的双信号。gydF4y2Ba

  • 基本的代数约束必须是平滑函数gydF4y2Ba

例如,假设您的模型有一个带有两个输入的Sum块——一个是加法,另一个是减法。如果将Sum块的输出提供给其中一个输入,就创建了一个代数循环,其中所有的块都包含直接馈通。gydF4y2Ba

在不知道输入的情况下,SUM块无法计算输出。金宝appSimulink检测代数循环,并且代数环求解器使用迭代环路解决环路。在SUM Block示例中,软件可通过以下方式计算正确的结果:gydF4y2Ba

xgydF4y2Ba一个gydF4y2Ba(gydF4y2BatgydF4y2Ba) =gydF4y2BaugydF4y2Ba(gydF4y2BatgydF4y2Ba) / 2。gydF4y2Ba (1)gydF4y2Ba

代数环求解器采用基于梯度的搜索方法,要求与代数环相对应的代数约束的连续一阶导数。因此,如果代数环包含不连续,代数环求解器可能失败。gydF4y2Ba

有关更多信息,请参见gydF4y2Ba在MATLAB和Simulink中求解Index-1 DAEs金宝appgydF4y2Ba[gydF4y2Ba1gydF4y2Ba]gydF4y2Ba

代数环求解器中的信赖域和行搜索算法gydF4y2Ba

Simu金宝applink代数循环求解器使用两个算法之一来解决代数循环:gydF4y2Ba

  • 信赖域gydF4y2Ba

  • 线搜索gydF4y2Ba

在默认情况下,Simul金宝appink会选择最好的代数循环求解器,并且在仿真过程中可以在两种方法之间切换。为您的模型显式地启用自动代数循环求解器选择,在MATLABgydF4y2Ba®gydF4y2Ba命令行输入:gydF4y2Ba

set_param (gydF4y2Bamodel_namegydF4y2Ba、“AlgebraicLoopSolver”、“汽车”);gydF4y2Ba

要切换到信任区域算法,在MATLAB命令行输入:gydF4y2Ba

set_param (gydF4y2Bamodel_namegydF4y2Ba、“AlgebraicLoopSolver”、“TrustRegion”);gydF4y2Ba

如果代数环求解器不能用信赖域算法求解代数环,尝试用行搜索算法模拟模型。gydF4y2Ba

要切换到行搜索算法,在MATLAB命令行输入:gydF4y2Ba

set_param (gydF4y2Bamodel_namegydF4y2Ba、“AlgebraicLoopSolver”、“LineSearch”);gydF4y2Ba

有关更多信息,请参见:gydF4y2Ba

代数循环求解器的限制gydF4y2Ba

代数循环求解是一个迭代过程。只有当代金宝app数环收敛到一个确定的答案时,Simulink代数环解算器才能成功。当环路无法收敛或收敛速度太慢时,仿真退出并产生错误。gydF4y2Ba

代数循环求解器不能解决包含以下任何一个代数循环:gydF4y2Ba

  • 带有离散值输出的块gydF4y2Ba

  • 具有非双精度或复杂输出的块gydF4y2Ba

  • 不连续gydF4y2Ba

  • StateflowgydF4y2Ba®gydF4y2Ba图表gydF4y2Ba

模型中代数循环的含义gydF4y2Ba

如果您的模型包含代数循环:gydF4y2Ba

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

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

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

    对于大多数模型,代数循环求解器是计算昂贵的第一步。金宝appSimulink可以快速地解决后续的时间步长,因为这是一个很好的起点gydF4y2BaxgydF4y2Ba一个gydF4y2Ba可从上一个时间步长获得。gydF4y2Ba

另请参阅gydF4y2Ba

|gydF4y2Ba|gydF4y2Ba|gydF4y2Ba

相关话题gydF4y2Ba


[gydF4y2Ba1gydF4y2Ba]gydF4y2Ba洗发林,劳伦斯F.,M.W.Reichelt和J.a.Kierzenka。“在Matlab和Simulink中解决Index-1 daes。”金宝appgydF4y2Ba暹罗。gydF4y2Ba研究概述,第三,1999年,pp.538 - 552。gydF4y2Ba

[gydF4y2Ba2gydF4y2Ba]gydF4y2Ba更多,j,狗屁Garbow, K.E.Hillstrom。gydF4y2BaMINPACK-1的用户指南gydF4y2Ba.阿贡,伊利诺州:阿贡国家实验室,1980。gydF4y2Ba

[gydF4y2Ba3.gydF4y2Ba]gydF4y2Barabinowitz,菲利普,ed。gydF4y2Ba非线性代数方程的数值方法gydF4y2Ba高登和Breach科学出版社,1970。gydF4y2Ba