什么是代数环?

发生在两个或多个模块在输入端口具有信号直接传递而形成反馈的情况时,直接传递的模块在不知输入端口的值的情况下无法计算出输出端的值,也就是现在时刻的输出是依赖现在时刻的输入值来计算的。当这种情况出现时simulink会在每一次迭代言算完成时,去决定它是否会有解。代数回路会减缓方真执行的速度并可能会没有解。

当方程两边都出现同一个变量时,即产生了代数环。如:3y+4=y

当Simulink中存在非模型延迟时,通常会产生代数环。比如,传感器将输出信号反馈到输入端。

解决代数环:连续模型,在构成代数环的反馈环节加入memory模块;离散模型就加入单位延迟1/Z,不过加入memory后仿真会慢些,但用了加速后,这个牺牲还是值得的。另还有拆解法等,具体见下面第9行论文内容。

Simulink提供了一些专门手段来拆解代数环,例如代数约束模块(Algebraic Constraint),积分模块(以及离散积分模块)的状态输出端等。这些手段可以解决一些特定的代数环问题。下面举一个利用积分模块的状态输出端的例子。

从积分模块的输人端口到输出端口是非直通的,但从积分模块的初始值输人端口到输出端口,以及从复位输人端口到输出端口却都是直通的。因此,如果从积分模块的输出端口引出的信号再经过一些直通模块后又反馈到积分模块的初始值输人端口或者复位输人端口,则构成一个代数环。

为了解决这个问题,Simulink专门为积分模块设计了一个状态端口(state port),其输出与输出端口完全相同,仅在内部计算的时序上有细微区别,而无论是从积分模块的初始值输人端口还是从复位输人端口到状态端口都是非直通的。因此,当出现上述的代数环问题时,可以从积分模块的状态端口引出信号。这样,代数环就被拆解了。

参考论文:<>     <>

更多代数环的知识:

1 代数环的基本概念

代数环的一个最简单的例子如图1 所示。图1 中实现的是一个减法器模块,其输出反馈回来作为一个输入。这个看似简单的例子却反映了一个复杂的问题:在进行仿真时,按正常的计算顺序,应该先计算模块的输入,然后再计算由输入驱动的输出,而在图1 所示的情况下,因为输入中的一部分直接来自于输出,在没有得到输出数据的时候,输入是无法计算的;同时,因为输出中的一部分直接来自于输入,在没有得到输入数据的时候,输出也是无法计算的。这是一个死锁(deadlock)条件。这就是所谓的代数环。

输出中的一部分反馈到输入,或者说,输入直接决定于输出,这是反馈回路的共同特点。代数环是一种特殊的反馈回路,它的特殊之处就在于除了输入直接决定于输出外,输出还直接决定于输入,在这里, “直接”二字很重要,它体现了代数环的实质,仿真计算中的死锁就是由此产生的。

当然,通过变换拆环,容易解决图1 所示问题。事实上,图1 中实现的功能可以表示为:

z = u ? z

它可以变换为:

z = u/ 2

显然,这时候代数环不存在了,仿真计算不存在问题。但实际问题中的代数环的表现形式千差万别,有的是非常复杂的,不可能仅用这样的简单办法来解决。

2 产生代数环的条件

如前所述,代数环是一种反馈回路,但并非所有的反馈回路都是代数环。代数环存在的充分必要条件是:存在一个闭合路径,该闭合路径中的每一个模块都是直通模块。

所谓直通,指的是模块输入中的一部分直接到达输出。SimuLink的模块库中提供的很多模块都是直通模块。

3 一般动力学模型仿真过程中避免代数环的方法

代数环对应于一定的数学模型的形式(即隐函数的形式) ,如果能够将原始的数学模型进行等价变换,得到显函数形式,则按显函数实现仿真模型,就可以消除代数环。

matlab中memory模块初始值,Matlab的memory模块消除代数环相关推荐

  1. matlab 细化 去环,Matlab的memory模块消除代数环

    什么是代数环? 发生在两个或多个模块在输入端口具有信号直接传递而形成反馈的情况时,直接传递的模块在不知输入端口的值的情况下无法计算出输出端的值,也就是现在时刻的输出是依赖现在时刻的输入值来计算的.当这 ...

  2. m 文件 dll matlab 中调用_如何在matlab中调用python程序

    现在python很火,很多代码都是python写的,如果你和我一样,习惯了使用matlab,还想在matlab中调用Python的代码,应该怎么办呢?其中一条思路:首先在matlab中调用系统脚本命令 ...

  3. 在MATLAB中使用数学符号,在matlab中怎么输入特殊符号 function在MATLAB中怎么用

    导航:网站首页 > 在matlab中怎么输入特殊符号 function在MATLAB中怎么用 在matlab中怎么输入特殊符号 function在MATLAB中怎么用 相关问题: 匿名网友: 一 ...

  4. matlab中m文件是什么,MATLAB中M文件的使用

    运行方法: 使用matlab的时候,可以在"Command Window"内直接书写matlab代码,也可以将代码保存到M文件中,然后运行该文件.使用matlab主界面菜单&quo ...

  5. matlab 如何axis,在matlab中axis是什么意思,matlab中axis的用法

    在matlab中axis是什么意思轴在matlab中是什么意思,matlab中的Axis是指在绘图中通常使用axis函数来设置坐标值的范围,在matlab的命令窗口中输入doc轴或help轴即可获得该 ...

  6. 将上述代码中的crc初始值改为0

    要将上述代码中的CRC初始值改为0,只需要将crc的初始值从0xFFFF更改为0即可,代码如下: def crc16(data: bytes) -> int:crc = 0for byte in ...

  7. C#调用matlab时,类型初始值设定项引发异常,如何解决?

    ## 错误来由 由于项目需要,在.NET Framework web api接口程序中写了一个接口(版本4.7.2),引用了由matlab compiler生成的dll文件, 在本机调试的过程中,也遇 ...

  8. matlab中函数的公式计算,MATLAB怎样定义函数(入门) 有一函数 f(x,y)=x^2+sinxy+2y , 写一程序, 输入自变量的值,输出函数值....

    (x,y)=x+y(x>=0&y>=0)f(x,y)=x+y*y(x>= 由热心网友提供的答案1: 对于函数Sa(t)=sin(x)/x,其中x∈[-10π,10π],mat ...

  9. MATLAB中如何让分度值小点,实验6 干涉的matlab模拟.doc

    实验6 干涉的matlab模拟.doc MATLAB在光信息处理中的应用课程上机实验(三峡大学2013年)实验6干涉的MATLAB模拟一.实验目的掌握双缝干涉.牛顿环的MATLAB模拟.二.实验内容1 ...

最新文章

  1. Exchange 2010与Exchange Online混合部署PART 5:配置边缘
  2. mysql select语句最简_10个mysql中select语句的简单用法
  3. python绘制三维散点图-Python散点图与三维图
  4. pythonsuper_python中的super()是什么意思呢
  5. Mybatis中重要的小知识点
  6. Python深浅拷贝辨析
  7. 软件测试测试 python_Python测试简介
  8. 计算机出现开机故障的原因,电脑开机出现英文故障?先别着急拿去修!几分钟教你轻松搞定...
  9. 克服浮躁_建立强大的全球社区时克服挑战
  10. Java代码制作ie浏览器_[Java教程]判断IE浏览器代码实例
  11. html颜色代码表_html颜色代码表
  12. Direct X 修复
  13. 基于解释的学习一个例子
  14. IE下 jqModal的问题
  15. 【Https】Spring RestTemplete支持Https安全请求
  16. 计算机学院毕业典礼口号,大学毕业典礼横幅标语大全
  17. wilcoxon符号秩检验matlab,Wilcoxon符号秩统计量的性质.ppt
  18. 团体标准的意义,办理团体标准的好处
  19. Linux系统安装开源版PyMOL
  20. 串口TXD和RXD的线序导致不能通信的问题

热门文章

  1. Python 标准库 —— queue、heapq与PriorityQueue
  2. Matlab Tricks(十二)—— 矩阵阈值化的实现
  3. Python 波浪线与补码
  4. 优美的 Python
  5. keil c语言中断怎么写,如何利用keil C实现单片机中断功能
  6. python是什么意思中文、好学吗-爬虫Python入门好学吗?学什么?
  7. 如何系统的自学python-自学Python应该如何正确系统学习,避免少走弯路
  8. python程序-第一个Python程序——在屏幕上输出文本
  9. python从入门到精通需要多久-学Python编程难吗 从入门到精通学习Python要多久
  10. python基本代码教程-python基础教程