MATLAB中的代数环概念

本文探讨了Simulink模型中信号环尤其是直接馈通模块引发的代数环问题,介绍了如何识别直接馈通模块,以及代数环的数学和物理背景。文章还详细讲解了代数环求解器的工作原理,包括信赖域算法和行搜索算法,以及代数环对模型性能的影响和限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在 Simulink® 模型中,当存在信号环并且信号环中只存在直接馈通模块时,将出现代数环。直接馈通表示 Simulink 需要模块输入信号的值来计算当前时间步的输出。这种信号循环会在同一时间步中产生模块输出和输入的循环依存关系。这会导致一个需要在每个时间步求解的代数方程,从而增加仿真的计算成本。

下面是具有直接馈通输入的模块的一些示例:

·Math Function

·Gain

·Product

·State-Space,当 D 矩阵系数为非零时

·Sum

·Transfer Fcn,当分子和分母同阶时

·Zero-Pole,当模块的零值与极点一样多时

非直接馈通模块维护一个 State 变量。其中两个示例是 Integrator 和 Unit Delay 模块。

提示

        要确定一个模块是否具有直接馈通,请阅读模块参考页的特性部分。

        下图显示代数环的一个示例。Sum 模块是一个代数变量 xa,该变量必须等于第一个输入 u 减去 xa(例如 xa = u – xa)。

 此简单循环的解为 xa = u/2。

数学解释

        Simulink 包含一套用于对常微分方程 (ODE) 进行仿真的数值求解器,它们是您可以写为以下形式的方程组:

其中 x 是状态向量,t 是时间自变量。       

         某些方程组包含涉及自变量和状态向量,但不涉及状态向量的导数的其他约束。此类方程组称为微分代数方程 (DAE)。

        代数一词是指不涉及任何导数的方程。您可以用半显式格式来表示工程中出现的 DAE

其中:

  • f 和 g 可以是向量函数。

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

  • 第二个方程是代数方程。

  • 微分变量的向量是 x

  • 代数变量的向量是 xa

        在 Simulink 模型中,代数环是代数约束。具有代数环的模型定义微分代数方程组。在 ODE 求解器的每个步长中,Simulink 以数值方式求解代数方程(代数环)的 xa。

图窗中的模型等同于此方程组的半显式形式:

在 ODE 求解器的每个步长中,代数环求解器必须先求解代数约束的 xa,然后再计算导数 ˙x。

物理解释

代数约束:

  • 在对物理系统建模时发生,通常是守恒定律所致,例如质量与能量守恒

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

  • 对动态系统中的系统响应的设计进行约束

        使用 Simscape™ 将跨越机械、电气、液压和其他物理领域的系统建模为物理网络。Simscape 构造描述模型行为的 DAE。软件将这些方程与模型的其余部分集成,然后直接解算 DAE。Simulink 同时对不同物理领域中的组件变量求解,从而避免代数环问题。

人为代数环

        当原子子系统或 Model 模块导致 Simulink 检测到代数环时,将发生人为代数环,即使该子系统的内容不包含从输入到输出的直接馈通也是如此。当您创建原子子系统时,所有 Inport 模块都将是直接馈通,从而导致代数环。

        以包含的模型为例,该模型表示被控对象的简单比例控制,其描述如下

它可以重写为以下状态空间形式: 

该方程组既没有代数变量也没有直接馈通,因此不包含代数环。

 按照以下步骤中的说明修改模型:

  1. 将 Controller 和 Plant 模块包含在子系统中。

  2. 在子系统对话框中,选择视为原子单元使子系统成为原子子系统。

  3. 在模型配置参数的诊断窗格中,将代数环参数设置为 error

        在对此模型进行仿真时,会出现代数环,因为该子系统是直接馈通,即使原子子系统内的路径不是直接馈通也是如此。仿真停止并出现代数环错误。

代数环求解器的工作原理

        当模型中包含代数环时,Simulink 在每个时间步使用非线性求解器解算代数环。求解器执行迭代以确定代数约束的解(如果存在)。因此,有代数环的模型的运行速度可能比没有代数环的模型的运行速度慢。

        Simulink 使用折线信赖域算法解算代数环。使用的容差小于 ODE 求解器 Reltol 和 Abstol。这是因为 Simulink 使用“显式 ODE 方法”来解算指数为 1 的微分代数方程 (DAE)。

要使代数环求解器发挥作用,

  • 必须存在一个模块,在该模块中,代数环求解器可以中断循环并尝试解算该循环。

  • 模型应该具有双精度实信号。

  • 基础代数约束必须是一个平滑函数。

        例如,假设您的模型中有一个带两个输入的 Sum 模块:一个相加,另一个相减。如果您将 Sum 模块的输出馈送给其中一个输入,则会创建一个代数环,其中的所有模块都包括直接馈通。

        Sum 模块无法在不知道输入的情况下计算输出。Simulink 会检测代数环,代数环求解器将使用迭代循环解算代数环。在 Sum 模块示例中,该软件通过以下方式计算正确的结果:

xa(t) = u(t) /2.(1)

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

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

        Simulink 代数环求解器使用下面两种算法之一来解算代数环:

  • 信赖域

  • 行搜索

        默认情况下,Simulink 选择最佳代数环求解器,并可能在仿真期间在两种方法之间切换。要为模型显式启用自动代数环求解器选项,请在 MATLAB® 命令行中输入:

set_param(model_name, 'AlgebraicLoopSolver','Auto');

        要切换到信赖域算法,请在 MATLAB 命令行中,输入:

set_param(model_name, 'AlgebraicLoopSolver', 'TrustRegion');

        如果代数环求解器不能解算使用信赖域算法的代数环,请尝试使用行搜索算法对模型进行仿真。

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

set_param(model_name, 'AlgebraicLoopSolver', 'LineSearch');
代数环求解器的限制

        代数环解算是一个迭代过程。仅当代数环收敛到一个明确的答案时,Simulink 代数环求解器才会成功。当代数环无法收敛,或收敛速度太慢时,仿真将退出并显示错误。

        代数环求解器无法解算包含以下任何一项的代数环:

  • 带有离散值输出的模块

  • 带有非双精度或复数输出的模块

  • 不连续点

  • Stateflow® 图

模型中代数环的影响

如果模型包含代数环:

  • 不能为模型生成代码。

  • Simulink 代数环求解器可能无法解算代数环。

  • 由于 Simulink 会尝试解算代数环,因此仿真执行速度可能很缓慢。

    对于大多数模型,代数环求解器的第一个时间步会耗费大量计算资源。Simulink 能够快速解算后续时间步,因为上一个时间步为 xa 提供了良好的起点。

matlabsimulink中代数环问题的讲解及解决方法1-解决代数环方法.doc 本帖最后由 小小2008鸟 于 2012-11-30 11:26 编辑 什么是代数环?发生在两个或多个模块在输入端口具有信号直接传递而形成反馈的情况时,直接传递的模块在不知输入端口的值的情况下无法计算出输出端的值,也就是现在时刻的输出是依赖现在时刻的输入值来计算的。当这种情况出现时simulink会在每一次迭代言算完成时,去决定它是否会有解。代数回路会减缓方真执的速度并可能会没有解。     当方程两边都出现同一个变量时,即产生了代数环。如:3y 4=y 当Simulink中存在非模型延迟时,通常会产生代数环。比如,传感器将输出信号反馈到输入端。解决代数环      连续模型,在构成代数环的反馈环节加入memory模块;      离散模型就加入单位延迟1/Z,不过加入memory后仿真会慢些,但用了加速后,这个牺牲还是值得的。另还有拆解法等,具体见下面第9论文内容。Simulink提供了一些专门手段来拆解代数环,例如代数约束模块,积分模块的状态输出端等。这些手段可以解决一些特定的代数环问题。下面举一个利用积分模块的状态输出端的例子。    从积分模块的输人端口到输出端口是非直通的,但从积分模块的初始值输人端口到输出端口,以及从复位输人端口到输出端口却都是直通的。因此,如果从积分模块的输出端口引出的信号再经过一些直通模块后又反馈到积分模块的初始值输人端口或者复位输人端口,则构成一个代数环。    为了解决这个问题,Simulink专门为积分模块设计了一个状态端口,其输出与输出端口完全相同,仅在内部计算的时序上有细微区别,而无论是从积分模块的初始值输人端口还是从复位输人端口到状态端口都是非直通的。因此,当出现上述的代数环问题时,可 以从积分模块的状态端口引出信号。这样,代数环就被拆解了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值