在仿真软件金宝appgydF4y2Ba®gydF4y2Ba模型中,一个gydF4y2Ba代数循环gydF4y2Ba当信号循环存在于循环内的直接馈通块时出现。gydF4y2Ba直接引线gydF4y2Ba意味着Simulink金宝app需要块的输入信号的值来计算当前时间步骤的输出。这种信号循环在同一时间步骤中创建块输出和输入的圆形依赖性。这导致在每个时间步骤中求解的代数方程,将计算成本添加到模拟中。gydF4y2Ba
一些带有直接馈通输入的块示例如下:gydF4y2Ba
状态方程gydF4y2Ba,当D矩阵系数是非零的gydF4y2Ba
转移FcngydF4y2Ba,当分子和分母的阶数相同时gydF4y2Ba
零极点gydF4y2Ba,当块的0和极点一样多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
金宝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。该软件将这些方程与模型的其余部分集成,然后直接求解DAEs。金宝appSimulink同时解决了不同物理域组件的变量,避免了代数循环的问题。gydF4y2Ba
一个gydF4y2Ba人工代数循环gydF4y2Ba发生在原子子系统或Model块导致Simulink检测代数循环时,即使子系统的内容不包含从输入到输出的直接反金宝app馈。当您创建一个原子子系统时,所有的Inport块都是直接馈通的,从而导致一个代数循环。gydF4y2Ba
从包含的模型开始,它代表了一个简单的比例控制所描述的电厂gydF4y2Ba
可以以状态空间形式重写为gydF4y2Ba
该系统既没有代数变量也没有直接馈通,也不包含代数循环。gydF4y2Ba
修改模型的步骤如下:gydF4y2Ba
将控制器块和工厂块封装在子系统中。gydF4y2Ba
在“子系统”对话框中选择gydF4y2Ba当作原子单位gydF4y2Ba使子系统原子化。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
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
Shampine和解决的gydF4y2Banleqn。m代码gydF4y2Ba
Fortran程序HYBRD1在gydF4y2BaMINPACK-1的用户指南gydF4y2Ba[gydF4y2Ba2gydF4y2Ba]gydF4y2Ba
鲍威尔的"求解非线性方程组的Fortran子程序gydF4y2Ba非线性代数方程的数值方法gydF4y2Ba[gydF4y2Ba3.gydF4y2Ba]gydF4y2Ba
非线性极小化的信赖域方法gydF4y2Ba(优化工具箱)gydF4y2Ba.gydF4y2Ba
线搜索gydF4y2Ba(优化工具箱)gydF4y2Ba.gydF4y2Ba
代数循环求解是一个迭代过程。只有当代金宝app数环收敛到一个确定的答案时,Simulink代数环解算器才能成功。当环路无法收敛或收敛速度太慢时,仿真退出并产生错误。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洗发林,劳伦斯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