非线性系统:相平面法

非线性系统:相平面法

非线性系统的相平面法是一种重要的分析工具,用于研究系统的动力学行为。通过相平面法,可以直观地观察系统状态变量的变化,分析系统的稳定性、周期性和其他动力学特性。本文将详细介绍相平面法的基本思想、步骤、相轨迹的绘制方法,探讨线性系统与非线性系统的相平面分析,并提供一个非线性系统的程序示例,最后讨论相平面法的优缺点。

基本思想

相平面法通过将系统的状态变量表示在一个二维平面上,并绘制出这些变量随时间变化的轨迹,以揭示系统的动力学特性。相平面法可以帮助我们理解系统的稳定性、周期性行为、极限环等特性。

相平面法步骤

相平面法的基本步骤如下:

  1. 建立系统的微分方程
    对于一个二阶非线性系统,其微分方程可以表示为:
    x ¨ = f ( x , x ˙ ) \ddot{x} = f(x, \dot{x}) x¨=f(x,x˙)

  2. 转换为一阶微分方程组
    将二阶微分方程转换为两个一阶微分方程:
    { x ˙ = y y ˙ = f ( x , y ) \begin{cases} \dot{x} = y \\ \dot{y} = f(x, y) \end{cases} {x˙=yy˙=f(x,y)

  3. 数值求解微分方程
    使用数值方法(如 Runge-Kutta 法)求解微分方程组,得到状态变量随时间的演化。

  4. 绘制相平面和相轨迹
    在相平面上绘制状态变量之间的关系,形成相轨迹。

相轨迹绘制方法

Python 实现相平面和相轨迹绘制

以下是一个简单的 Python 示例,展示了如何绘制 Van der Pol 振荡器的相平面和相轨迹。

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivpdef van_der_pol(t, z, mu):x, y = zdxdt = ydydt = mu * (1 - x**2) * y - xreturn [dxdt, dydt]# 参数
mu = 1.0
t_span = (0, 100)
y0 = [1, 0]# 求解微分方程
sol = solve_ivp(van_der_pol, t_span, y0, args=(mu,), dense_output=True)# 绘制相平面和相轨迹
t = np.linspace(0, 100, 4000)
z = sol.sol(t)
x, y = zplt.plot(x, y, label='Van der Pol oscillator')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Phase Plane of Van der Pol Oscillator')
plt.legend()
plt.grid(True)
plt.show()

在上述代码中,我们定义了 Van der Pol 振荡器的微分方程,并使用 solve_ivp 函数求解该方程。然后,我们在相平面上绘制出系统的相轨迹。

线性系统的相平面分析

线性系统的相平面分析是一种经典方法,用于研究线性微分方程的动力学行为。通过分析系统的特征值,可以判断系统的稳定性。

对于一个二阶线性系统,其状态方程可以表示为:
x ˙ = A x \dot{\mathbf{x}} = A\mathbf{x} x˙=Ax
其中, x = [ x 1 , x 2 ] T \mathbf{x} = [x_1, x_2]^T x=[x1,x2]T 是状态向量, A A A 是系统矩阵。

系统矩阵 A A A 的特征值决定了系统在相平面上的行为:

  • 如果特征值均为负实数,系统趋于稳定的平衡点。
  • 如果特征值有正实数,系统是不稳定的。
  • 如果特征值为复数且实部为负,系统表现出稳定的螺旋轨迹。
  • 如果特征值为复数且实部为正,系统表现出不稳定的螺旋轨迹。

线性系统的相平面绘制示例

import numpy as np
import matplotlib.pyplot as plt# 定义线性系统
A = np.array([[0, 1], [-2, -3]])# 求解特征值和特征向量
eigvals, eigvecs = np.linalg.eig(A)# 绘制特征向量
origin = np.array([[0, 0], [0, 0]])
fig, ax = plt.subplots()
ax.quiver(*origin, eigvecs[0,:], eigvecs[1,:], color=['r','b'], scale=5)# 设置坐标轴
ax.axhline(0, color='black',linewidth=0.5)
ax.axvline(0, color='black',linewidth=0.5)
ax.grid(color = 'gray', linestyle = '--', linewidth = 0.5)plt.xlim(-2, 2)
plt.ylim(-2, 2)
plt.title('Phase Plane of Linear System')
plt.xlabel('x1')
plt.ylabel('x2')
plt.show()

非线性系统的相平面分析

非线性系统的相平面分析比线性系统复杂得多,因为非线性系统的动力学行为更加多样化。通过相平面法,可以直观地观察非线性系统的复杂行为,如极限环、混沌等。

示例:Van der Pol 振荡器

Van der Pol 振荡器是一个经典的非线性系统,其动力学方程为:
{ x ˙ = y y ˙ = μ ( 1 − x 2 ) y − x \begin{cases} \dot{x} = y \\ \dot{y} = \mu (1 - x^2) y - x \end{cases} {x˙=yy˙=μ(1x2)yx

通过数值求解和绘制相轨迹,可以观察其在相平面上的动力学行为。

Python 实现

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivpdef van_der_pol(t, z, mu):x, y = zdxdt = ydydt = mu * (1 - x**2) * y - xreturn [dxdt, dydt]# 参数
mu = 1.0
t_span = (0, 100)
y0 = [1, 0]# 求解微分方程
sol = solve_ivp(van_der_pol, t_span, y0, args=(mu,), dense_output=True)# 绘制相平面和相轨迹
t = np.linspace(0, 100, 4000)
z = sol.sol(t)
x, y = zplt.plot(x, y, label='Van der Pol oscillator')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Phase Plane of Van der Pol Oscillator')
plt.legend()
plt.grid(True)
plt.show()

在这里插入图片描述

优缺点

优点

  1. 直观性:相平面法通过可视化的方式展示系统的状态变化,直观地揭示系统的动力学特性。
  2. 分析稳定性:通过分析相轨迹,可以判断系统的平衡点和稳定性。
  3. 揭示周期性行为:相平面法能够识别系统的周期性行为和极限环。

缺点

  1. 限于二维系统:相平面法只适用于二维系统,对于高维系统无法直接应用。
  2. 无法精确解析求解:相平面法主要是基于图形观察和分析,无法提供精确的定量信息。
  3. 可视化有限:对于复杂的相轨迹和相平面,仅凭人眼可能无法完全捕捉到细微的变化和行为特征。
  4. 对数值求解的依赖:相平面法通常依赖于数值计算和数值模拟,这涉及到选择适当的数值方法,并对数值误差和数值稳定性有充分的认识。

结论

相平面法是分析非线性系统的重要工具,通过绘制相轨迹,可以直观地观察和理解系统的动力学行为。虽然相平面法有其局限性,但它在揭示系统的稳定性、周期性和极限环等特性方面具有重要作用。希望本文能够帮助您更好地理解相平面法在非线性系统中的应用。如果您有任何问题或建议,欢迎在评论区留言讨论。
推荐两个可以直接绘制相轨迹的网站:
http://mathlets.org/mathlets/linear-phase-portraits-matrix-entry/
http://www.bluffton.edu/homepages/facstaff/nesterd/java/slopefields.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/20895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[NOIP2015 提高组] 子串

题目背景 NOIP2015 Day2T2 题目描述 有两个仅包含小写英文字母的字符串 A A A 和 B B B。 现在要从字符串 A A A 中取出 k k k 个互不重叠的非空子串,然后把这 k k k 个子串按照其在字符串 A A A 中出现的顺序依次连接起来得到一个新的字符串。请问有多少…

Tree——输出项目的文件结构(Linux)

输出项目中的文件结构可以使用tree命令。tree是一个用于以树状结构显示目录内容的命令行工具。它非常适合快速查看项目的文件结构。安装: sudo apt-get install tree 使用: 在命令行中导航到项目的根目录,输出文件结构。 tree 也可以将结构输…

【30天精通Prometheus:一站式监控实战指南】第13天:graphite_exporter从入门到实战:安装、配置详解与生产环境搭建指南,超详细

亲爱的读者们👋   欢迎加入【30天精通Prometheus】专栏!📚 在这里,我们将探索Prometheus的强大功能,并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。🚀   Prometheus是云原生和DevOps的…

网关(Gateway)- 自定义过滤器工厂

自定义过滤工厂类 DemoGatewayFilterFactory package com.learning.springcloud.custom;import org.apache.commons.lang.StringUtils; import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.GatewayFilterChai…

Java 自定义异常

自定义异常 自定义异常的必要 Java中不同的异常类,分别表示着某一种具体的异常情况。那么在开发中总是有些异常情况是核心类库中没有定义好的,此时我们需要根据自己业务的异常情况来定义异常类。 自定义异常类 自定义异常类可以参照lang包中系统提供的异…

Vue3中的常见组件通信之props和自定义事件

Vue3中的常见组件通信 概述 ​ 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-model3. $refs4. 默认…

第十二章 创建Web客户端

文章目录 第十二章 创建Web客户端SOAP向导的概述使用SOAP向导 第十二章 创建Web客户端 web客户端是访问web服务的软件。web客户端提供了一组代理方法,每个方法对应于web服务的一个方法。代理方法使用与它所对应的web服务方法相同的签名,并在被请求时调用…

Python课设-学生信息管理系统

一、效果展示图 二、前端代码 1、HTML代码 <1>index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…

安卓模拟鼠标,绘图板操作电脑PC端,卡卡罗特也说好,儿童节快乐

家人们&#xff0c;上链接了&#xff1a;https://download.csdn.net/download/jasonhongcn/89387887

B站如何屏蔽短视频:成都鼎茂宏升文化传媒公司

B站如何屏蔽短视频&#xff1a;优化你的观看体验 在当今数字化时代&#xff0c;B站&#xff08;哔哩哔哩&#xff09;作为国内领先的弹幕视频网站&#xff0c;以其丰富的视频资源和独特的弹幕文化吸引了大量用户。然而&#xff0c;随着短视频的兴起&#xff0c;B站也引入了短视…

Java的可见性和有序性你真的懂吗

一、可见性(Visibility) 1.指的是&#xff1a;一个线程对变量的修改可被其他线程看见。 2.Java提供了volatile、synchronized、final、Lock等来保证可见性。 3.volatile&#xff1a;volatile修饰的变量在每次访问时都会从主内存中读取&#xff0c;并且在修改后会立即刷新回主内…

intel深度相机D455的使用

一、D455介绍 Intel RealSense D455 是RealSense D400系列的一部分&#xff0c;这个系列的设备以其高精度和可靠性而闻名。D455相比于之前的型号&#xff08;如D415和D435&#xff09;&#xff0c;提供了更远的感知范围和更高的精度。 二、使用代码 我们先定义一下相关的函数…

鸿蒙OS初识

学习官网&#xff1a;https://www.harmonyos.com/cn/develop 准备 注册&#xff0c;安装软件&#xff08;node:12, DevEco Studio&#xff09;&#xff1a; https://developer.harmonyos.com/cn/docs/documentation/doc-guides/software_install-0000001053582415#ZH-CN_TOP…

MFC3d立体按钮制作

1、本程序基于前期我的博客文章MFC用CButtonST类实现图片透明按钮(免费源码下载) 2、添加CeXDib.cpp CeXDib.h ShadeButtonST.cpp ShadeButtonST.h到项目文件夹下&#xff0c;和FileView中如图。 3、在ButtonShadeDlg.h中添加代码 #include "ShadeButtonST.h" #in…

4分之1外螺纹怎么编程:挑战与策略解析

4分之1外螺纹怎么编程&#xff1a;挑战与策略解析 在机械制造领域&#xff0c;螺纹编程是一项至关重要的技术任务。当面对如4分之1外螺纹这样的具体需求时&#xff0c;编程人员需要综合运用专业知识与编程技巧&#xff0c;以确保螺纹的精确度和生产效率。本文将围绕四个方面、…

springboot595基于Java的大学生迎新系统-手把手调试搭建

springboot595基于Java的大学生迎新系统-手把手调试搭建 springboot595基于Java的大学生迎新系统-手把手调试搭建

Qml开发的两种方法

一.Qml开发的两种方法 1.Qt Creator 开发,手动编写qml代码 这种方法开发很方便&#xff0c;适合对qml语言非常熟悉的开发人员。 2.用Qt Design Studio 设计qml界面 这种方法更适合对qml不太熟悉的人&#xff0c;可以实现qml控件的拖拉拽&#xff0c;类似与widget界面开发&…

C#语言进阶(二)—事件 第二篇(.net标准事件模型)

总目录 C# 语法总目录 系列链接 C#语言进阶(二) 事件 第一篇(发布订阅模式) C#语言进阶(二) 事件 第二篇(.net标准事件模型) C#语言进阶(二) 事件 第二篇(事件访问器) 事件 第二篇目录 事件 第二篇2. .net标准事件模型 事件 第二篇 2. .net标准事件模型 标准事件模型…

【原型模式】详解

一.概念 原型模式是一种创建型设计模式&#xff0c;它的主要思想是通过复制现有对象来创建新对象&#xff0c;而不是通过实例化一个类来创建。在原型模式中&#xff0c;我们称被复制的对象为原型&#xff08;Prototype&#xff09;&#xff0c;新创建的对象为克隆体&#xff0…

用户画像知识点补充——多数据源

引入 针对用户画像项目来说&#xff08;产品&#xff09;必须要支持从多种数据源加载业务数据&#xff0c;构建用户标签。 在之前的标签模型开发中&#xff0c;主要是为了简化开发复杂度&#xff0c;业务数据统一存储到HBase表中。 数据源包含如下几个方面&#xff1a; 存储H…