我是靠谱客的博主 美好胡萝卜,最近开发中收集的这篇文章主要介绍matlab memory 代数环,代数环概念 - MATLAB & Simulink - MathWorks 中国,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

代数环求解器的工作原理

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

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

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

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

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

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

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

2550aba8aff1926f0a09852f04f4918e.gif

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 中国所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部