主要内容gydF4y2Ba

代数循环概念gydF4y2Ba

在仿真软件金宝appgydF4y2Ba®gydF4y2Ba模型中,一个gydF4y2Ba代数循环gydF4y2Ba当信号环路中只有直接馈通块时发生。gydF4y2Ba直接引线gydF4y2Ba表示Simulink需金宝app要块的输入信号的值来计算它在当前时间步长的输出。这样的信号循环在同一时间步长内创建块输出和输入的循环依赖关系。这就产生了一个需要在每个时间步上求解的代数方程,为模拟增加了计算成本。gydF4y2Ba

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

间接直通的gydF4y2Ba块维护一个State变量。两个例子是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

金宝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。该软件将这些方程与模型的其余部分集成,然后直接求解dae。金宝appSimulink同时求解了不同物理域的元件变量,避免了代数循环问题。gydF4y2Ba

人工代数循环gydF4y2Ba

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

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

$ frc {1}{s^2+2s+1}$ frc {1}{s^2+2s+1gydF4y2Ba

可以用状态空间的形式重写为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. 将Controller和Plant模块封装在一个子系统中。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方法”来求解Index-1微分代数方程(DAEs)。gydF4y2Ba

为了让代数循环求解器工作,gydF4y2Ba

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

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

  • 潜在的代数约束必须是一个光滑函数gydF4y2Ba

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

在不知道输入的情况下,Sum块无法计算输出。金宝appSimulink检测代数循环,代数循环求解器使用迭代循环求解循环。在Sum块的例子中,软件这样计算正确的结果: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

默认情况下,Simuli金宝appnk会选择最好的代数循环求解器,并在仿真过程中在两种方法之间进行切换。在MATLAB中显式地为您的模型启用自动代数循环求解器选择gydF4y2Ba®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

代数循环求解是一个迭代的过程。Simu金宝applink代数环求解器只有在代数环收敛到一个确定的答案时才算成功。当环路不能收敛或收敛太慢时,模拟退出并产生错误。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·雷切特和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