前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2.数值计算(1) --求解连续微分系统和混沌系统

2.数值计算(1) --求解连续微分系统和混沌系统

作者头像
用户9925864
发布2022-07-27 08:01:10
1.1K0
发布2022-07-27 08:01:10
举报
文章被收录于专栏:算法工程师的学习日志

前言

微分系统在工程项目中很常见,通过物理建模之后,基本都需要求解微分方程得到其结果,混沌系统属于特殊的一类微分系统,在某些项目上也很常见,同时可以引申出分岔图、李雅普诺夫指数谱、相图、庞加莱截面等,本文探讨通过matlab常见的微分求解函数和simulink求解器来实现计算。

关键字:微分系统,混沌系统,Simulink

正文

1、常微分方程(Lorenze混沌系统)

方法1:m文件实现

代码语言:javascript
复制
x0=[0;0;1e-3]; %设定初始值
[t,x]=ode45(@lorenzfun,[0,100],x0); %调用函数ode45求解,
figure(1)
plot(t,x)
figure(2)
plot3(x(:,1),x(:,2),x(:,3))
代码语言:javascript
复制
function dx=lorenzfun(t,x)
% 输入微分方程
a=10;c=28;b=8/3;
dx=zeros(3,1);
dx(1)=-b*x(1)+x(2)*x(3);
dx(2)=-a*x(2)+10*x(3);
dx(3)=-x(1)*x(2)+c*x(2)-x(3);

结果如图

方法2:Simulink模块实现

其中三个积分模块的初始值设置与exam1相同,仿真时长为100s。精度设置:Simulation--Configuration Parameters—Relative tolerance, 1e-3改为1e-5(试试不作此修改的结果比较)。运行后双击示波器scope后可看到。

在matlab命令窗口输入画图命令:

代码语言:javascript
复制
figure
plot(tout,yout)
figure
plot3(yout(:,2),yout(:,3),yout(:,1))

方法3:simulink向量模块

在Fcn模块里面分别定义好3组微分方程,最后进行积分求解即可

2、常时滞微分方程

方法1:m文件需调用dde23来求解

代码语言:javascript
复制
sol = dde23('exam1f',[1, 0.2],ones(3,1),[0, 5]);
plot(sol.x,sol.y);
title('Example 2')
xlabel('time t');
ylabel('y(t)');
代码语言:javascript
复制
function v = exam1f(t,y,Z)
ylag1 = Z(:,1);
ylag2 = Z(:,2);
v = zeros(3,1);
v(1) = ylag1(1);
v(2) = ylag1(1) + ylag2(2);
v(3) = y(2);

方法2:Simulink中S函数来实现

注:用Simulink中S函数求解时滞微分方程的核心思想在于:将时滞变量作为S函数的外部输入,这个需要通过transport delay模块实现。

延申思考

1、在求解微分方程后如何得到分叉图?

Tips:系统单参数分岔图的计算方法:最大值法和Poincare截面法,最大值法最为简便,对系统微分方程(组)进行求解,对求解的结果用getmax函数进行取点,并绘图即可。

Matlab 作为一个工具软件,拥有丰富的函数库,作为开发项目可以考虑直接用他的算法函数,高效快捷,但对于学习者,建议自己做底层,能自己写函数接口自己调用测试,就像前段时间闹得沸沸扬扬的某些科研机构Matlab被禁,被禁的话我们能做什么,底层算法自己能设计好,不用它也行。有啥tips或者讨论,咱们评论区见

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师的学习日志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、常微分方程(Lorenze混沌系统)
    • 方法1:m文件实现
      • 方法2:Simulink模块实现
        • 方法3:simulink向量模块
        • 2、常时滞微分方程
          • 方法1:m文件需调用dde23来求解
            • 方法2:Simulink中S函数来实现
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档