目录

1. 什么是代数环

2. 如何解决代数环

3. 多个s函数导致的代数环

4. 源代码

1. 什么是代数环

在simulink仿真过程中,当输入信号直接取决于输出信号,同时输出信号也直接取决于输入信号时,由于数字计算的时序性,而出现的由于没有输入无法计算输出,没有输出也无法得到输入的“死循环” ,称之为代数环

如下图所示,output = func(input+output)。初始时,由于没有output,所以不能计算func函数;但是为了得到output,又必须要计算func。如此往复就形成了代数环。

2. 如何解决代数环

——连续模型

对于连续模型,可以在反馈通道添加Memory模块延时

                  

——离散模型

对于离散模型,可以在反馈通道添加delay模块延时

               

3. 多个s函数导致的代数环

对于控制系统的仿真来说,很少会出现代数环的问题。下图这种系统就会出现代数环,但是这种系统本身就不存在(至少控制系统不会出现这种玩意)。

当simulink中的模块不足以完成建模时,常用的方法就是使用s函数了。如果只是一个s函数建立的模型,例如下图,也不会出现代数环的问题(如果简单粗暴的用s函数建立上图那种模型当我没说)。

如果用到多个s函数,如下图,就会提示代数环的警告了。

systemP的模型:(源代码放最后啦)

systemM的模型:(源代码放最后啦)

       ①

   ②

    ③

       ④

对于这种情况如果我们加入Memory模块做延时,虽然能解决代数环的问题,但是如果系统本身不是稳定的,延时环节会让系统产生震荡。

将加入Memory和没加Memory的两种输出的波形图对比:(本身搭建的系统就没有意义,所以不分析,将分析另外一个波形图,以此说明差异)


上面的两个模型没有严密的逻辑分析,紧供分析代数环,所以对于系统震荡的问题不好分析,所以在此插入我另外一个仿真中遇到的两个图(也是systemM和systemP构成的仿真,只是系统严谨)

下图是加入Memory延时,导致机器学习训练收敛性很差

下图是去掉延时,解决代数环后,通过机器学习后的控制波形

很容易发现,第二个的效果很好啦


延时对不稳定系统的影响还是很大的。对于多个s函数,导致计算时序的影响,出现代数环的问题,我们可以在s函数上做调整。

在s函数,flag等于0时,也就是初始化时,我们可以看到

sizes.DirFeedthrough

的设置,输入是否直接影响输出。将其值设为0(修改连续系统的DirFeedthrough,如果修改纯数学公式的会导致仿真错误,本文中systemP为连续系统,systemM为数学公式);仿真时就不会出现代数环的问题,且波形和有代数环时一样。


我在做仿真的时候,systemP和systemM可以用simulink提供的模块搭建,但是会比较麻烦,所以采用了s函数,后来也做了完全用simulink提供的模块搭建的仿真,控制效果也和s函数出现的效果类似。


4. 源代码

systemP:

%systemP
function [sys,x0,str,ts,simStateCompliance] = systemP(t,x,u,flag)switch flagcase 0   [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;case 1   sys=mdlDerivatives(t,x,u);case 2    sys=mdlUpdate(t,x,u);case 3   sys=mdlOutputs(t,x,u);case 4   sys=mdlGetTimeOfNextVarHit(t,x,u);case 9   sys=mdlTerminate(t,x,u);otherwise DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
endfunction [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  = 2;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 2;
sizes.NumInputs      = 2;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;  sys = simsizes(sizes);x0  = [0;0];str = [];ts  = [0 0]; simStateCompliance = 'UnknownSimState';function sys=mdlDerivatives(t,x,u)
sys = [0 1;0 -1] * x + [0;1]*u(1) - [0;-1/2]*u(2);function sys=mdlUpdate(t,x,u)
sys = [];function sys=mdlOutputs(t,x,u)
sys = x;function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 1;
sys = t + sampleTime;function sys=mdlTerminate(t,x,u)
sys = [];

systemM:

%systemM
function [sys,x0,str,ts,simStateCompliance] = systemM(t,x,u,flag)switch flagcase 0  [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;case 1  sys=mdlDerivatives(t,x,u);case 2   sys=mdlUpdate(t,x,u);case 3   sys=mdlOutputs(t,x,u);case 4   sys=mdlGetTimeOfNextVarHit(t,x,u);case 9   sys=mdlTerminate(t,x,u);otherwise DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
endfunction [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  = 0;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 1;
sizes.NumInputs      = 3;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;  sys = simsizes(sizes);x0  = [];str = [];ts  = [0 0]; %[0 0] simStateCompliance = 'UnknownSimState'; function sys=mdlDerivatives(t,x,u)
sys = [];function sys=mdlUpdate(t,x,u)
sys = [];function sys=mdlOutputs(t,x,u)
n0 = u(1);        %r/min
a = u(2)*pi/180;  %degree
w = u(3);         %rad/s
n = w*60/(2*pi);  %r/minM1 = 19.98 * sign(n0 - n) * (0.005 * sin(a) + 0.02 * cos(a));
Mmud = 2 / 15 * pi^2 * 0.05 * 1 * (0.0675^2 * 0.055^2 / (0.0675^2 - 0.055^2)) * (n0 - n);
Mw = 1.7987 * (tanh(32.8317 * w)-tanh(7.4921 * w)) + 0.9601 * tanh(6.0375 * w) + 0.0378 * w;
Mf = 0.1 * sin(w) + 0.32;
ML = M1+Mmud+Mw+Mf;
sys = ML;function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 1;
sys = t + sampleTime;function sys=mdlTerminate(t,x,u)
sys = [];

如何解决simulink控制系统仿真中的代数环相关推荐

  1. SCILAB及其在控制系统仿真中的应用

    科学计算软件SCILAB及其在控制系统仿真中的应用 黄慧敏 徐华中 (武汉理工大学 自动化学院,湖北 武汉,430070) 摘要:Scilab (Science laboratory)是一种类似于商业 ...

  2. matlab在线性系统中的应用,MATLAB在控制系统仿真中的应用

    <MATLAB在控制系统仿真中的应用>由会员分享,可在线阅读,更多相关<MATLAB在控制系统仿真中的应用(23页珍藏版)>请在人人文库网上搜索. 1.第四章 MATLAB在控 ...

  3. matlab中的代数环问题及其消除方法,Matlab中的代数环问题及其消除方法

    0 引言 反馈是一种普遍存在的现象,在进行计算机仿真的时候,将经常会遇到反馈回路.仿真时需要按照一定的时序执行相应的计算步骤,对于存在反馈回路的控制系统,输入和输出存在着计算时序,当输入直接取决于输出 ...

  4. matlab中的代数环问题及其消除方法,Matlab中的代数环问题及其消除方法.pdf

    互 擎译 咛 棼 i 斡 磐 i 叮 j l 由 M atIa b 中的代数环问题及其消除方法 的 代 l i 一 数 环 A 1 9 e b r a i CL o o pi nS i m u l a ...

  5. matlab中的代数环问题及其消除方法,Matlab中代数环问题和其消除方法.PDF

    M a t l a b 中 的 Matlab 中的代数环问题及其消除方法 代 数 环 Algebraic Loop in Simulation of Matlab and its Eliminatio ...

  6. 单神经元PID控制+Simulink控制系统仿真

    最近在学习基于神经网络的电机智能控制,神经网络与PID有两种结合方式:采用单神经元结构,神经元输入权值一一对应PID的三个参数,神经元的输入值为经过比例.积分和微分处理后的偏差值:另一种是在常规PID ...

  7. ModelCoder中的代数环问题

    ​01.引言 2020年5月23日,美国商务部宣布,将共计33家中国公司和机构列入实体清单,哈工大.哈工程被禁用"工科神器"Matlab,而Simulink是Matlab软件的扩展 ...

  8. matlab memory 代数环,[2018年最新整理]simulink代数环解决方法.doc

    [2018年最新整理]simulink代数环解决方法 一,代数环 在simulink中,直接馈通定义为系统的输出直接依赖输入,也就是说,模块的输出方程中包含输入则此模块具备直接馈通特性将带有直接馈通特 ...

  9. c语言多变量传函,控制系统仿真-中国大学mooc-题库零氪

    第1章 控制系统仿真与CAD概述 第1章 控制系统仿真与CAD概述 单元测试 1. A. B. C. D. 2. A. B. C. D. 3. A. B. C. D. 4. A. B. C. D. 5 ...

最新文章

  1. 如何修改博士论文?这份45页PPT《Editing your thesis》教你
  2. 北信源携手天津麒麟共建国产信息安全
  3. oracle中如何插入
  4. 命令执行漏洞-命令执行-漏洞位点- 代码注入-漏洞利用-联合执行-Bypass(空格,关键字过滤,变量绕过)-例题两道-actf2020exec-GXYCTF2019 Ping Ping Ping
  5. 命名空间 namespace
  6. 一加7发布之后 雷军微博沦陷:米粉直呼心累
  7. html悬停显示图片,JS实现悬停单元格显示图片
  8. linux服务器知识学习:了解Linux系统的启动过程
  9. reactive streams与观察者模式
  10. android markdown编辑器,推荐几款好用的Markdown编辑器
  11. geotools读取shp数据的数据类型
  12. JavaEE下宠物领养网站的设计与实现
  13. iPad出现问题时,如何恢复出厂设置怎么操作?
  14. android 装苹果系统,安卓机子安装苹果IOS系统?
  15. 消防中计算机基础知识,消防基础知识考试题
  16. 学会这些方法,扩展磁盘分区还不是轻轻松松?
  17. 2022茶艺师(初级)考试模拟100题模拟考试平台操作
  18. sheng的学习笔记-ConcurrentHashMap(JDK1.7和16)源码分析
  19. 手机制作音乐专辑封面_你如何制作好的专辑封面
  20. outlook邮箱服务器信息怎么设置,Outlook邮箱POP3、SMTP服务器设置信息。

热门文章

  1. 计算机教案三年级冀教版,冀教版小学三年级信息技术教案lbrack;画美丽的早晨rsqb;...
  2. 基于springboot+mybatis+jsp日用品商城管理系统
  3. Python 执行 JS 代码 —— PyExecJS
  4. 燕京理工学院计算机答辩难吗,燕京理工学院:一腔热血答与辩,满腹经纶方成功...
  5. 洛谷P1607 [USACO09FEB]庙会班车Fair Shuttle
  6. 小学生台灯哪个品牌更护眼?精选教育部认可护眼灯品牌
  7. 怎样借助Python爬虫给宝宝起个好名字--python 学习
  8. Python探索性数据分析(EDA)统计数据和建模
  9. Facebook SDK for iOS 2.4 iOS 6 上运行崩溃
  10. SQL报错Every derived table must have its own alias