在仿真软件金宝appgydF4y2Ba®gydF4y2Ba模型中,一个gydF4y2Ba代数循环gydF4y2Ba当信号回路存在且回路中只有直接馈通块时发生。gydF4y2Ba直接引线gydF4y2Ba意味着Simulink金宝app需要块输入信号的值来计算当前时间步的输出。这样的信号循环会在同一时间步中创建块输出和输入的循环依赖关系。这会导致在每个时间步都需要求解代数方程,从而增加模拟的计算成本。gydF4y2Ba
一些带有直接馈通输入的区块示例如下:gydF4y2Ba
状态方程gydF4y2Ba,当D矩阵系数非零时gydF4y2Ba
转移FcngydF4y2Ba当分子和分母的顺序相同时gydF4y2Ba
零极点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
金宝appSimulink包含一套用于模拟的数值求解器gydF4y2Ba常微分方程gydF4y2Ba,这些方程组可以写成gydF4y2Ba
在哪里gydF4y2BaxgydF4y2Ba状态向量是和吗gydF4y2BatgydF4y2Ba为独立时间变量。gydF4y2Ba
一些方程组包含额外的约束条件,包括自变量和状态向量,但不包括状态向量的导数。这种系统被称为gydF4y2Ba微分代数方程gydF4y2Ba,gydF4y2Ba
这个词gydF4y2Ba代数的gydF4y2Ba指的是不包含任何导数的方程。可以用半显式形式表示工程中出现的daegydF4y2Ba
地点:gydF4y2Ba
fgydF4y2Ba和gydF4y2BaggydF4y2Ba可以是向量函数。gydF4y2Ba
第一个方程是微分方程。gydF4y2Ba
第二个方程是代数方程。gydF4y2Ba
微分变量的向量是gydF4y2BaxgydF4y2Ba.gydF4y2Ba
代数变量的向量为gydF4y2BaxgydF4y2Ba一个gydF4y2Ba.gydF4y2Ba
在Si金宝appmulink模型中,代数循环是代数约束。带有代数循环的模型定义了一个微分代数方程组。金宝appSimulink用数值方法解决代数方程(代数循环)gydF4y2BaxgydF4y2Ba一个gydF4y2Ba在ODE求解器的每一步。gydF4y2Ba
的gydF4y2Ba模型gydF4y2Ba图中等价于此半显式方程组:gydF4y2Ba
在ODE解算器的每个步骤中,代数循环解算器必须解算gydF4y2BaxgydF4y2Ba一个gydF4y2Ba在计算导数之前gydF4y2Ba .gydF4y2Ba
代数约束:gydF4y2Ba
在物理系统建模时发生,通常是由于守恒定律,如质量和能量守恒gydF4y2Ba
当您为模型选择一个特定的坐标系时发生gydF4y2Ba
帮助在动态系统中对系统响应施加设计约束gydF4y2Ba
使用Simscape™对跨越机械、电气、液压和其他物理领域的系统进行建模,作为物理网络。Simscape构造了描述模型行为的dae。该软件将这些方程与模型的其余部分集成,然后直接求解dae。金宝appSimulink同时求解了不同物理域的元件变量,避免了代数循环问题。gydF4y2Ba
一个gydF4y2Ba人工代数循环gydF4y2Ba当原子子系统或模型块导致Simulink检测代数循环时发生,即使子系统的内容不包含从输入到输出的直接馈通。金宝app当您创建原子子系统时,所有的import块都是直接馈通的,从而导致一个代数循环。gydF4y2Ba
从包含的模型开始,它代表了一个简单的比例控制的电厂描述gydF4y2Ba
可以用状态空间的形式重写为gydF4y2Ba
该系统既没有代数变量,也没有直接馈通,也不包含代数回路。gydF4y2Ba
按照如下步骤修改模型:gydF4y2Ba
将Controller和Plant模块封装在一个子系统中。gydF4y2Ba
在“子系统”对话框中,选择gydF4y2Ba当作原子单位对待gydF4y2Ba使子系统成为原子。gydF4y2Ba
在gydF4y2Ba诊断gydF4y2Ba窗格中,设置模型配置参数gydF4y2Ba代数循环gydF4y2Ba参数gydF4y2Ba错误gydF4y2Ba
.gydF4y2Ba
当模拟这个模型时,会发生一个代数循环,因为子系统是直接馈通的,即使原子子系统中的路径不是直接馈通的。模拟因代数循环错误而停止。gydF4y2Ba
当一个模型包含一个代数循环时,Simulink在每个时间步骤都使用一个非线性求解器金宝app来求解代数循环。求解器执行迭代以确定代数约束的解(如果存在)。因此,具有代数循环的模型比没有代数循环的模型运行得更慢。gydF4y2Ba
金宝appSimulink使用狗腿信任区域算法来解决代数循环。所使用的公差小于ODE求解器gydF4y2BaReltolgydF4y2Ba
和gydF4y2BaAbstolgydF4y2Ba
这是因为Simulink使用“显式O金宝appDE方法”求解索引1微分代数方程(DAE)。gydF4y2Ba
为了让代数循环求解器工作,gydF4y2Ba
必须有一个块,在那里循环求解器可以打破循环并尝试解决循环。gydF4y2Ba
模型应该有真正的双重信号。gydF4y2Ba
基础代数约束必须是平滑函数gydF4y2Ba
例如,假设您的模型有一个带有两个输入的Sum块——一个是加法,另一个是减法。如果将Sum块的输出输入到其中一个输入,就创建了一个代数循环,其中所有块都包含直接馈通。gydF4y2Ba
Sum块在不知道输入的情况下无法计算输出。Simulink检测代数循环,代数循环解算器使用迭代循环求解循环。在Sum块示例中,软件通过金宝app以下方式计算正确的结果:gydF4y2Ba
xgydF4y2Ba一个gydF4y2Ba(gydF4y2BatgydF4y2Ba) =gydF4y2BaugydF4y2Ba(gydF4y2BatgydF4y2Ba) / 2。gydF4y2Ba | (1)gydF4y2Ba |
该代数环求解器采用基于梯度的搜索方法,需要对应于代数环的代数约束的连续一阶导数。因此,如果代数循环包含不连续点,代数循环求解器就会失败。gydF4y2Ba
有关更多信息,请参见gydF4y2Ba用MATLAB和Simulink求解Index-1 DAEs金宝appgydF4y2Ba[gydF4y2Ba1gydF4y2Ba]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
Shampine和解决的gydF4y2Banleqn。m代码gydF4y2Ba
Fortran程序HYBRD1在gydF4y2BaMINPACK-1用户指南gydF4y2Ba[gydF4y2Ba2gydF4y2Ba]gydF4y2Ba
鲍威尔的"求解非线性方程组的Fortran子程序"gydF4y2Ba非线性代数方程的数值方法gydF4y2Ba[gydF4y2Ba3.gydF4y2Ba]gydF4y2Ba
非线性极小化的信赖域方法gydF4y2Ba(优化工具箱)gydF4y2Ba.gydF4y2Ba
线搜索gydF4y2Ba(优化工具箱)gydF4y2Ba.gydF4y2Ba
代数循环求解是一个迭代的过程。Simu金宝applink代数环求解器只有在代数环收敛到一个确定的答案时才算成功。当环路不能收敛或收敛太慢时,模拟退出并产生错误。gydF4y2Ba
代数环解算器不能解包含下列任何一个代数环:gydF4y2Ba
具有离散值输出的块gydF4y2Ba
具有非双输出或复杂输出的块gydF4y2Ba
不连续gydF4y2Ba
StateflowgydF4y2Ba®gydF4y2Ba图表gydF4y2Ba
如果模型包含代数循环:gydF4y2Ba
您不能为模型生成代码。gydF4y2Ba
Simu金宝applink代数循环解算器可能无法解算代数循环。gydF4y2Ba
当Simul金宝appink试图解决代数循环时,仿真执行得很慢。gydF4y2Ba
对于大多数模型,代数循环求解器在第一步的计算是昂贵的。金宝appSimulink快速地解决了后续的时间步骤,因为它是一个很好的起点gydF4y2BaxgydF4y2Ba一个gydF4y2Ba在上一个时间步骤中可用。gydF4y2Ba
解决比较gydF4y2Ba|gydF4y2Ba讨论二阶导数过零检测gydF4y2Ba|gydF4y2Ba代数约束gydF4y2Ba|gydF4y2Ba描述符状态gydF4y2Ba
[gydF4y2Ba1gydF4y2Ba]gydF4y2Ba在MATLAB和Simulink中求解索引-1 DAE金宝appgydF4y2Ba暹罗。gydF4y2Ba研究概述,第三,1999年,pp.538 - 552。gydF4y2Ba
[gydF4y2Ba2gydF4y2Ba]gydF4y2Ba更多,j,狗屁Garbow, K.E.Hillstrom。gydF4y2BaMINPACK-1的用户指南gydF4y2Ba.阿贡,IL:阿贡国家实验室,1980。gydF4y2Ba
[gydF4y2Ba3.gydF4y2Ba]gydF4y2Ba拉比诺维茨,菲利普,ed。gydF4y2Ba非线性代数方程的数值方法gydF4y2Ba,纽约:戈登和科学出版社,1970年。gydF4y2Ba