前文我们介绍了线性系统的相图绘制。

这篇文章里,我们用几个例子,来介绍非线性系统的相图的绘制方法。

这里举的例子都是自治系统方程的例子,也就是方程结果与t0的初始取值无关(时不变系统),不含外部周期性驱动力之类的与t相关的量。因为描述自治系统,只需要知道系统的空间上的各个变量的导数,然后组成相空间即可。而时变系统各个状态都会随时间变化,无法用静态的相图去定性分析。

所以对于自治二阶系统,二阶的相平面已经可以完全的描述出系统的运动状态,无论线性还是非线性。通常的步骤可以分为两步:(1)计算出每一个点的dy和ddy导数,(2)根据每个点得到的向量,绘制出向量场对应的流线图。

以《非线性系统》这本书中给出的一个例子作为展示。其中二阶非线性方程的公式如下:

绘制出空间中每一个点的系统导数,绘制出流线,即可得到这个非线性系统的相图。

可以看到,非线性系统的相平面,可能拥有不止一个平衡点。但是这些平衡点附近的邻域,也都可以线性化,用上一节中的线性系统的相图来解释其行为。比如上图,就拥有两个稳定结点,和一个鞍点。

接下来再介绍一种只有在非线性条件下,才会出现的一种经典相平面图案:极限环。

以经典的Van der Pol方程为例,这个方程的形式如下:

后面的ε为一个常数,ε越大方程的非线性越大。取ε=0.3,绘制出相空间图:

整个空间只有一个平衡点,即极限环内部发散的螺旋点。为了直观的了解极限环的特性,选取不同的初始条件,对方程进行时域的求解,得到下面的结果:

在极限环外的点,刚开始呈现出收敛的波形,但是随后振幅保持恒定。在极限环里面的点,刚开始呈现出发散的波形,但是随后振幅也保持稳定。两者都被空间中的极限环所吸引,进行周而复始的画圈圈运动中。

如果方程中某些系数发生变化(比如上面方程的ε由负变为正),会导致整个相空间发生改变。这种改变会使得平衡点性质发生变化,导致整个系统的性质发生变化,我们称系统在这个位置发生了分岔。比如Van der Pol方程的ε由负变为正,平衡点由稳定变为发散,导致空间中稳定位置由一个点变为一个运动的极限环。

如果实验中能够观测到振动信号,也可以用绘制相平面的方法,观测信号的特性。下面用三幅图给出了测量过程中常见周期信号的相平面图:

第一幅图为典型的线性振动图,波形为正弦曲线,相平面为一个圆。

第二幅图为典型的极限环振动。这类振动有个特点,就是即使受到扰动,振幅也能始终保持在一个稳定的值。在实际实验中如果发现这个现象,而且没有外部周期驱动力(方程为自治系统),则基本能确定其为极限环运动。

第三幅图为典型的高维非线性。因为相平面内的流线不会交叉。这种交叉曲线是高维空间在二维平面上的投影。图中展示的是高维非线性中的倍周期现象的模拟。这个在后面文章中会介绍到。

当然,实际试验中由于噪声,测量的结果不会这么好看。比如最终的结果如果杂乱无章没有规律,理论上肯定是混沌现象出现了,但实际上很有可能是噪声太大而已。

后面附上本章绘图用到的matlab代码:

%1二维相空间
%非线性
clear
clc
close all%1多平衡点的非线性系统
%参考 非线性系统(中文翻译第三版) Khalil P32
[y,dy]=meshgrid(-0.5:0.02:1.5,-0.5:0.02:1.5);%初始化网格
u=zeros(size(y));v=u;
for k=1:numel(y)%计算网格上每一个点的上的方向F=Fdydx(0,[y(k);dy(k)],1);u(k)=F(1);v(k)=F(2);
end
figure()
streamslice(y,dy,u,v,4)
xlabel('y')
ylabel('dy')
box on%2极限环
[y,dy]=meshgrid(-4:0.1:4,-4:0.1:4);%初始化网格
u=zeros(size(y));v=u;
for k=1:numel(y)%计算网格上每一个点的上的方向F=Fdydx(0,[y(k);dy(k)],2);u(k)=F(1);v(k)=F(2);
end
figure()
streamslice(y,dy,u,v,3)
xlabel('y')
ylabel('dy')
box on
xlim([-4,4]);ylim([-4,4])figure()
streamslice(y,dy,u,v,3)
xlabel('y')
ylabel('dy')
box on
hold on
t2=0:0.1:50;
[y2,~]=ODE_RK4_hyh(t2,t2(2)-t2(1),[-4;4],2);
plot(y2(1,:),y2(2,:),'r','linewidth',2)
[y3,~]=ODE_RK4_hyh(t2,t2(2)-t2(1),[-0.1;0.1],2);
plot(y3(1,:),y3(2,:),'g','linewidth',2)
hold off
xlim([-4,4]);ylim([-4,4])
figure()
plot(t2,y2(1,:),'r','linewidth',2);ylim([-4,4])
figure()
plot(t2,y3(1,:),'g','linewidth',2);ylim([-4,4])%3不同时域信号在相图上的样子
figure()
t1=0:0.01:1;
y1=sin(10*pi*t1);
dy1=diffhyh(y1,2);
subplot(2,3,1)
plot(t1,y1);ylim([-1.5,1.5])
xlabel('t');ylabel('y')
subplot(2,3,4)
plot(y1,dy1);xlim([-1.5,1.5])
xlabel('y');ylabel('dy')
%非线性极限环t2=0:0.01:18;
[y,Output]=ODE_RK4_hyh(t2,t2(2)-t2(1),[-1;1.161],2);
y2=y(1,:);
dy2=y(2,:);
subplot(2,3,2)
plot(t2,y2);ylim([-2.5,2.5]);xlim([0,18])
xlabel('t');ylabel('y')
subplot(2,3,5)
plot(y2,dy2);xlim([-2.5,2.5])
xlabel('y');ylabel('dy')%混沌(模拟的信号,并没有给出实际的系统)
%二维系统下,相平面是可以完全描述系统的,不可能出现交叉。
%如果出现轨线交叉,则说明系统的维度大于2,相平面展示的图形只是高维系统在2维上的投影。
t3=0:0.01:2;
Gas=@(t,a,b,c) c*exp(-b*(t-a).^2);
y3=Gas(t3,0,120,1)+Gas(t3,1,120,1)+Gas(t3,2,120,1);
y3=y3+Gas(t3,0.3,90,0.5)+Gas(t3,1.3,90,0.5);
y3=y3-Gas(t3,0.6,300,0.3)-Gas(t3,1.6,300,0.3);
dy3=diffhyh(y3,2);
subplot(2,3,3)
plot(t3,y3);ylim([-0.5,1.5])
xlabel('t');ylabel('y')
subplot(2,3,6)
plot(y3,dy3);xlim([-0.5,1.5]);ylim([-0.15,0.15])
xlabel('y');ylabel('dy')function [F,Output]=Fdydx(x,y,Input)
%形式为Y'=F(x,Y)的方程,参见数值分析求解常系数微分方程相关知识
%高次用列向量表示,F=[dy(1);dy(2)];y(1)为函数,y(2)为函数导数
switch Input%示例1case 1p=[83.72,-226.31,229.62,-103.79,17.76,0];dy(1)=0.5*(-polyval(p,y(1))+y(2));dy(2)=0.2*(-y(1)-1.5*y(2)+1.2);F=[dy(1);dy(2)];%示例2case 2dy(1)=y(2);dy(2)=-y(1)+0.3*(1-y(1)^2)*y(2);%0.3F=[dy(1);dy(2)];
end
Output=[];
endfunction [y,Output]=ODE_RK4_hyh(x,h,y0,Input)
%4阶RK方法
%h间隔为常数的算法
y=zeros(size(y0,1),size(x,2));
y(:,1)=y0;
for ii=1:length(x)-1yn=y(:,ii);xn=x(ii);[K1,~]=Fdydx(xn    ,yn       ,Input);[K2,~]=Fdydx(xn+h/2,yn+h/2*K1,Input);[K3,~]=Fdydx(xn+h/2,yn+h/2*K2,Input);[K4,~]=Fdydx(xn+h  ,yn+h*K3  ,Input);y(:,ii+1)=yn+h/6*(K1+2*K2+2*K3+K4);
end
Output=[];
endfunction Fdiff=diffhyh(F,dim)
%采用2阶中心差分,边缘采用一阶向前或向后差分(边缘没有搞迎风差分,精度要求不高)
%dim,差分的维度方向,dim=1对应着矩阵向下方向的差分,dim=2对应的向右
diffF1=diff(F,1,dim);
if dim==1%向下Fdiff=([zeros(1,size(F,2));diffF1]+[diffF1;zeros(1,size(F,2))])/2;Fdiff(1,:)=diffF1(1,:);Fdiff(end,:)=diffF1(end,:);
elseif dim==2%向右Fdiff=([zeros(size(F,1),1),diffF1]+[diffF1,zeros(size(F,1),1)])/2;Fdiff(:,1)=diffF1(:,1);Fdiff(:,end)=diffF1(:,end);
end
end

参考资料:

[1] Khalil H K . 非线性系统(第3版)[M].电子工业出版社,2005.

[2]Morris W. Hirsch. Differential equations, dynamical systems, and an introduction to chaos [M] Academic Press

非线性可视化(2)非线性相图相关推荐

  1. MATLAB常见非线性可视化绘制方法-相图与相空间(二维线性相图与非线性相空间)

    MATLAB常见非线性可视化绘制方法-相图与相空间(二维线性相图与非线性相空间) 0 引言 1 简单二阶微分方程 1.1 最简单的线性系统 1.2 简单的非线性系统 1.3 简单的时变系统 2 线性系 ...

  2. 非线性可视化(5)非线性系统的分岔图

    在前面 非线性可视化(3)混沌系统 这一篇文章中,介绍了一个系统因为某个常数的改变,从而导致整个系统发生变化的例子.比如Duffing系统,随着阻尼d的增大,系统由混沌变为倍周期,又变为周期运动.想要 ...

  3. 饱和非线性、非饱和非线性

    论文AlexNet中提到饱和非线性.非饱和非线性神经元 1.先说一下线性和和非线性 线性linear,指量与量之间按比例.成直线的关系,在数学上可以理解为一阶导数为常数的函数: 非线性non-line ...

  4. 非线性可视化(4)庞加莱截面

    上一期介绍了几个经典的非线性系统,并给出了他们在三维相空间的各种表现. 但是随着维度增加到三维甚至更高维,光绘制出相空间已经不足以直观的了解系统的形态.我们也很难对着一坨烂七八糟的轨线在论文里水字数. ...

  5. 非线性可视化(3)混沌系统

    承接上一篇二维相图. 如果二维相平面中出现了交叉的轨线,则说明这个系统的维度很可能大于二维. 下面就以几个经典的系统作为示范.本章不涉及太多知识点,以展示为主.主要介绍三个经典的非线性混沌系统. 1  ...

  6. MATLAB非线性可视化(引3)多摆模型

    接着前面的Mandelbrot集和牛顿迭代继续介绍一个非线性模型:多摆.如果只看到前面的两个引子,肯定会有疑问:非线性只是一种通过迭代产生的数学游戏吗? 事实上,非线性存在于物理与工程中的各个领域.在 ...

  7. 非线性动力学_非线性动力学特辑 低维到高维的联通者

    序言: 本文将以维度为主线, 带量大家进入非线性动力学的世界. 文章数学部分不需要全部理解, 理解思维方法为主 非线性动力学,是物理学的思维进入传统方法所不能解决的问题的一座丰碑.它可以帮助我们理解不 ...

  8. 非线性调频 matlab,非线性调频信号

    随着现代电子技术和飞行技术的发展,对雷达的作用距离.分辨能力.测量精度和单值性等性能指标提出越来越高的要求,因此雷达信号形式的选择和信号处理的方式起着重要作用.在脉冲压缩技术中,雷达所使用的发射信号波 ...

  9. java解非线性方程组_Scipy - 非线性方程组的所有解

    我有一个非线性方程组,其中任何n都可以选择,因此向量x =(x1,...,xn)的长度可以不同 . 例如,系统可以是这样的: f1(x1,...,xn) = sum( xi + xi^2 ) = 0, ...

  10. 非线性动力学_非线性科学中的现代数学方法:综述

    Ch0[引言] 本文是作者的一个总结,力图在极度繁杂的数理知识体系中摘选出那些最广泛应用的核心工具及思想. 本文主要关注的问题都是非线性的.动态的.具体地讲,主要涉及的是:微分动力系统.泛函的最优化初 ...

最新文章

  1. Java面试题汇总及答案2021最新(ioNio)
  2. 高并发整体可用性:一文详解降级、限流和熔断
  3. 【MySQL】面试官:如何查询和删除MySQL中重复的记录?
  4. 运行JBoss 5.1.0 GA时出现Error installing to Instantiated:name=AttachmentStore state=Described错误的解决办法...
  5. CallBack函数 回调函数
  6. 使用Python和Numpy进行波士顿房价预测任务(二)【深度学习入门_学习笔记】
  7. 数据库SQL语句 | 快速上手 | 面试复习
  8. 计算机房防凝露保温材料,机房保温的方案.docx
  9. 2020高压电工考试软件及高压电工模拟考试题库
  10. 怎么用计算机sinB=0.67,三角函数练习题(附详细解答过程)
  11. encountered an improper argument解决方案
  12. 计算机总是提醒更新,电脑关机的时候总是提示系统正在更新怎么办?
  13. 图片太大,导致页面加载过慢的处理方法
  14. HiveSqlSparkSql —— 使用left semi join做in、exists类型子查询优化
  15. 协同办公OA项目:搭建“自定义”OA办公系统,原来就这么简单!
  16. PPT小事(二)“愿景”“使命”“宗旨”
  17. 向控件拖放数据,不积硅步无以至千里
  18. cqyz oj | 单峰排列
  19. sql临时表的创建及赋值
  20. 安卓3d游戏开发引擎_从德军总部3D到虚幻5,游戏引擎能有多大的飞跃?

热门文章

  1. JS(获取浏览器高度)
  2. html5直播礼物动画,GitHub - General757/giftanim: 直播礼物动画 送赞送礼物动画 仿映客礼物动画侧栏弹出送花人和礼物以及x1 x2 x3效果,支持队列 排序...
  3. 内存碎片与malloc(转)
  4. ie浏览器点击打印没反应_ie浏览器无响应怎么回事?ie浏览器点击没有反应解决方法分享...
  5. Ubuntu16.04安装百度网盘亲测可用
  6. 最全中华古诗词数据库,收录30多万诗词
  7. [开源工具] 串口转wifi —— 两个串口之间通过网络进行通信
  8. 基于因子分析和聚类分析 的SPSS河南省各地区综合发展分析+操作步骤+全文详细
  9. iOS开发工具,ios开发类库
  10. 第24期、宠物医院管理系统