概述
代数环求解器的工作原理
当模型中包含代数环时,Simulink 在每个时间步使用非线性求解器解算代数环。求解器执行迭代以确定代数约束的解(如果存在)。因此,有代数环的模型的运行速度可能比没有代数环的模型的运行速度慢。
Simulink 使用折线信赖域算法解算代数环。使用的容差小于 ODE 求解器 Reltol 和 Abstol。这是因为 Simulink 使用“显式 ODE 方法”来解算指数为 1 的微分代数方程 (DAE)。
要使代数环求解器发挥作用,
必须存在一个模块,在该模块中,代数环求解器可以中断循环并尝试解算该循环。
模型应该具有双精度实信号。
基础代数约束必须是一个平滑函数。
例如,假设您的模型中有一个带两个输入的 Sum 模块:一个相加,另一个相减。如果您将 Sum 模块的输出馈送给其中一个输入,则会创建一个代数环,其中的所有模块都包括直接馈通。
Sum 模块无法在不知道输入的情况下计算输出。Simulink 会检测代数环,代数环求解器将使用迭代循环解算代数环。在 Sum 模块示例中,该软件通过以下方式计算正确的结果:xa(t) = u(t) /2.(1)
代数环求解器使用基于梯度的搜索方法,这需要与代数环相对应的代数约束的连续一阶导数。因此,如果代数环包含不连续性,代数环求解器可能会失败。
有关详细信息,请参阅 Solving Index-1 DAEs in MATLAB and Simulink(在 MATLAB 和 Simulink 中解算指数为 1 的 DAE)
[1]代数环求解器中的信赖域算法和行搜索算法
Simulink 代数环求解器使用下面两种算法之一来解算代数环:
信赖域
行搜索
默认情况下,代数环求解器使用信赖域算法。
如果代数环求解器不能解算使用信赖域算法的代数环,请尝试使用行搜索算法对模型进行仿真。
要切换到行搜索算法,请在 MATLAB® 命令行中,输入:
set_param(model_name, 'AlgebraicLoopSolver', 'LineSearch');
要切换回信赖域算法,请在 MATLAB 命令行中,输入:
set_param(model_name, 'AlgebraicLoopSolver', 'TrustRegion');
有关详细信息,请参阅:
Shampine 和 Reichelt 的 nleqn.m 代码
User Guide for MINPACK-1(MINPACK-1 用户指南)中的 Fortran 程序 HYBRD1[2]
Numerical Methods for Nonlinear Algebraic Equations(非线性代数方程的数值方法)中 Powell 的“A Fortran subroutine for solving systems in nonlinear equations”(用于解算非线性方程组的 Fortran 子例程)[3]
非线性最小化信赖域方法(Optimization Toolbox).
线搜索(Optimization Toolbox).代数环求解器的限制
代数环解算是一个迭代过程。仅当代数环收敛到一个明确的答案时,Simulink 代数环求解器才会成功。当代数环无法收敛,或收敛速度太慢时,仿真将退出并显示错误。
代数环求解器无法解算包含以下任何一项的代数环:
带有离散值输出的模块
带有非双精度或复数输出的模块
不连续点
Stateflow® 图
最后
以上就是美好胡萝卜为你收集整理的matlab memory 代数环,代数环概念 - MATLAB & Simulink - MathWorks 中国的全部内容,希望文章能够帮你解决matlab memory 代数环,代数环概念 - MATLAB & Simulink - MathWorks 中国所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复