漫谈Simulink:什么是代数环?

Դ未知

ߣ老铁SEO

10

2019-08-02 07:41:56

All comments and opinions expressed on Zhihu are mine alone and do not necessarily reflect those of my employers, past or present.
本文内容所有内容仅代表本人观点,和Mathworks无关


在使用Simulink仿真的过程中,往往会看到关于代数环的错误提示或者警告信息。例如

Block diagram 'xxx' contains 1 algebraic loop(s). To see more details about the loops...

那么到底什么是代数环呢?

这篇文章目的就是来科普一下这个问题。为了介绍代数环,我们先来期待一下这个暑期即将上映的电影 《The Secrete Life of Pets》, 其中有一幕非常适合来解释什么是代数环。请看下图:

图中有四只可爱的狗狗,他们首尾相连,形成一个环路。

现在,我们可以把每只狗定义成为一个系统。这个系统有输入(食物)和输出(排泄物),很显然每个系统的输出会成为下一个系统的输入。

 

进一步的,我们假设每个系统的输入和输出是没有延时的。也就是说,在t时刻,每只狗的输入会立刻成为输出。对于这样的系统,我们称其具有Direct Feedthrough。

 

在这样的假设下,

第一只狗t时刻的输入 u1(t) ----> 第一只狗t时刻的输出 y1(t)

第一只狗t时刻的输出 y1(t)---> 第二只狗t时刻的输入u2(t)--> ... -> 第一只狗t时刻的输入u1(t)

现在问题来了,第一只狗t时刻的输入u1(t)到底应该是多少?这个数值不能随便定义,因为他自己会决定自己。这样的逻辑就构成了一个代数环。

这个代数环能不能解呢? 如果假设每只狗的输出都是输入的一半,我们会得到这样一个关系

u1(t) = 0.5*0.5*0.5*0.5*u1(t)

也就是说,只有u1(t) = 0解。

如果每只狗的输入都等于输出,那么这个u1(t) 可以取任何数。

如果每只狗的输入和输出都是一个非常复杂的非线性函数,那么我们就需要用数值方法来解这个非线性关系。

请注意,这只是在t时刻。一旦模型存在代数环,那么在仿真的每个时间点,我们都要进行这样复杂的代数运算, 这会大大的影响仿真的速度。另外,如果我们想把模型转换成c/c++代码用到硬件上的时候,是不允许出现有代数环的情况的。

所以,对于搭建好的模型,我们需要检查一下有没有代数环。

从MATLAB R2015b开始,有如下的功能可以方便的帮你找到系统中的代数环。

>> Simulink.BlockDiagram.getAlgebraicLoops(ModelName) 

现在问题又来了: 1. 找到代数环以后该怎么处理呢?2. 图中的实线和虚线的代数环有什么区别呢?

佭ϴý Ѷ Media8ý

在线客服

外链咨询

扫码加我微信

微信:juxia_com

返回顶部