常微分方程组解稳定性的分析

news2024/11/18 5:40:22

文章未完

相空间的绘制

我们随机选一个方程,随机选的,不是有数学手册吗,一般来说考题不可能出数学手册上的例子

import scipy.integrate as si 
import matplotlib.pyplot as plt
import numpy as np

## dx/dt = x**2-y**2+x+y
## dy/dt = x*y**2 - x**2*y

f  = lambda x,y:x**2-y**2+x+y
g  = lambda x,y:x*y**2 - x**2*y


dt = 0.01
time_start = 0
time_end   = 1
time = np.arange(time_start,time_end+dt,dt)

def system_Euler():
    global f
    global g
    global time
    
    x = np.zeros(time.size)
    y = np.zeros(time.size)
    x[0],y[0] = 1,2
    for i in range(1,len(time)):
        x[i] = x[i-1]+(f(x[i-1],y[i-1]))*dt
        y[i] = y[i-1]+(g(x[i-1],y[i-1]))*dt
        
    return x,y

def system_odeint(X,t=0):
    return np.array([X[0]**2-X[1]**2+X[0]+X[1],X[0]*X[1]**2-X[0]**2*X[1]])
system_init = np.array([1,2])

####################
x,y = system_Euler()

fig = plt.figure(figsize=(6,6),tight_layout=True)
fig.suptitle("Stability Analysis")

ax1 = plt.subplot(221)

ax1.plot(time,x, 'r-', label='$x(t)$')
ax1.plot(time,y, 'b-', label='$y(t)$')
ax1.set_title("Dynamics in time")
ax1.set_xlabel("time")
ax1.grid()
ax1.legend()

ax2 = plt.subplot(222)
ax2.plot(x,y,color="blue")
ax2.set_xlabel("x")
ax2.set_ylabel("y")  
ax2.set_title("Phase space")
ax2.grid()

#####################33
X,infodict = si.odeint(system_odeint,system_init,time,full_output=True)
x,y = X.T

ax3 = plt.subplot(223)

ax3.plot(time,x, 'r-', label='$x(t)$')
ax3.plot(time,y, 'b-', label='$y(t)$')
ax3.set_title("Dynamics in time")
ax3.set_xlabel("time")
ax3.grid()
ax3.legend()

ax4 = plt.subplot(224)
ax4.plot(x,y,color="blue")
ax4.set_xlabel("x")
ax4.set_ylabel("y")  
ax4.set_title("Phase space")
ax4.grid()


plt.savefig("0.jpg")
plt.pause(0.01)

一阶微分方程的稳定点

import scipy.integrate as si 
import matplotlib.pyplot as plt
import numpy as np
import sympy as sy
import copy 
## dx/dt = 2*x - x**2 - x*y
## dy/dt = x*y - y

f  = lambda X:X[0]*2 - X[0]**2 - X[0]*X[1]
g  = lambda X:-X[1] + X[0]*X[1]

dt = 0.01
time_start = 0
time_end   = 10
time = np.arange(time_start,time_end+dt,dt)
system_init = np.array([10,2])

def system_odeint(X,t=0):
    global f
    global g
    return np.array([f(X),g(X)])

fig = plt.figure(figsize=(12,6),tight_layout=True)
fig.suptitle("$x'=x(2-x-y);y'=y(-1+x)")

X,infodict = si.odeint(system_odeint,system_init,time,full_output=True)
x,y = X.T


def find_fixed_points():
    global f
    global g
    global X
    r = sy.symbols("r")
    c = sy.symbols("c")
    R = sy.Function("R")
    C = sy.Function("C")
    R = 2*r - r**2 -r*c
    C = -c + r*c
    REqual = sy.Eq(R,0)
    CEqual = sy.Eq(C,0)

    return sy.solve((REqual,CEqual),r,c)

ax1 = plt.subplot(121)
ax1.plot(time,x, 'r-', label='$x(t)$')
ax1.plot(time,y, 'b-', label='$y(t)$')
ax1.set_title("Dynamics in time")
ax1.set_xlabel("time")
ax1.grid()
ax1.legend()

ax2 = plt.subplot(122)
ax2.plot(x,y,color="blue")
ax2.set_xlabel("x")
ax2.set_ylabel("y")  
ax2.set_title("Phase space")
ax2.grid()
fixed_points = find_fixed_points()
for point in fixed_points:
    ax2.scatter(point[0],point[1],s=20,label="fixed points")
ax2.legend()

plt.savefig("0.jpg")
plt.pause(0.01)

微分方程稳定性的理论分析

  • 李雅普诺夫先生,一个很棒的人

一阶自洽微分方程平衡点稳定性的结论

设有微分方程,若等号右端不显含自变量t,则称之自治方程。

代数方程的实根称为方程的平衡点(奇点,奇解)

二阶自洽微分方程平衡点稳定性的结论

一个自洽的二阶微分方程可表示为两个一阶方程组成的方程组

代数方程组的实根是方程的平衡点

一阶自洽线性常系数方程组

对于,系数矩阵

显然,方程组有唯一平衡点,假定

特征方程:

特征根:

平衡点类型

稳定性

稳定结点

稳定

不稳定结点

不稳定

鞍点

不稳定

稳定退化结点

稳定

不稳定退化结点

不稳定

稳定焦点

稳定

不稳定焦点

不稳定

中心

不稳定

一个典型的非线性振动系统

显然他可以转换成一个近可积哈密顿系统

import matplotlib.pyplot as plt
import numpy as np
from scipy.integrate import odeint as sio
from numpy.linalg import solve as sol
import random
random.seed(0)


dt = 0.001
time_start = 0
time_end = 2
time = np.arange(time_start,time_end+dt,dt)


def RK4(diff,time):
    global dt
    global init 
    X = np.zeros((time.size,len(init)))
    X[0] = init
    for i in range(time.size-1):
        s0 = diff(time[i],X[i])
        s1 = diff(time[i]+dt/2,X[i]+dt*s0/2.)
        s2 = diff(time[i]+dt/2,X[i]+dt*s1/2.)
        s3 = diff(time[i+1],X[i]+dt*s2)
        X[i+1] = X[i] + dt*(s0+2*(s1+s2)+s3)/6.
    return time,X

def diff(time,Xi):
    xi,yi = Xi
    epision = 0.1
    global omega
    diffxi = yi
    diffyi = xi**2 - xi + epision*np.cos(omega*time)
    return np.array([diffxi,diffyi])
    

omega = 0.4
createvar = locals()
for i in range(20):
    init = np.array([1+(i>0)*random.uniform(0,0.01),1+(i>0)*random.uniform(0,0.01)])
    createvar["t"+str(i)],createvar["X"+str(i)] = RK4(diff,time)

for i in range(20):  
    plt.plot(eval("X"+str(i))[:,0],eval("X"+str(i))[:,1])#,label="omega:"+str(round(omega,2)))

plt.legend()
    
plt.pause(0.01)

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

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

相关文章

HashMap、HashTable和ConcurrentHashMap的区别

HashMap是线程不安全的,HashTable和ConcurrentHashMap是线程安全的。HashTable的实现线程安全的方式是:将所有的方法都加上锁,也就相当于对this加锁,此时,无论访问HashTable的任何一个元素都会加锁操作,在多…

ESP32设备驱动-MMA8451加速度计驱动

MMA8451加速度计驱动 1、MMA8451介绍 MMA8451 是一款具有 14 位分辨率的低功耗加速度计,具有灵活用户可编程选项的嵌入式功能,可配置为两个中断引脚。嵌入式中断功能可实现整体节能,从而使主机处理器免于连续轮询数据访问低通滤波数据和高通滤波数据,最大限度地减少颠簸检…

DockerCompose安装卸载、文件语法格式

DockerCompose安装卸载、文件语法格式 一、DockerCompose的概念和作用 1.1 相关概念 DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,不需要我们手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如…

【蓝桥杯】时间显示(省赛)Java

【问题描述】 小蓝要和朋友合作开发一个时间显示的网站。在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从1970年1月1日O0:00:00到当前时刻经过的毫秒数。 现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日&a…

IIC通信协议

数据有效性 IC由两条线组成,一条双向串行数据线SDA,一条串行时钟线SCL。 SDA线上的数据必须在时钟的高电平周期保持稳定,数据线的高或低电平状态只有在 SCL 线的时钟信号是低电平时才能改变。 换言之, SCL为高电平时表示有效数据…

Crack:结构分析和设计软件:Cross Section Analysis-Design

Cross Section Analysis & Design (美国、欧洲、亚洲和澳大利亚最受好评的结构软件)是一款功能强大的应用程序,可以执行各种横截面计算,包括钢筋混凝土截面的设计(钢筋计算器)。所提供的横截面可以是简…

Python之argparse模块的使用

我们在写一个成熟的Python项目时候,需要传入若干指定的参数。而不是写死在程序里,这个时候就要用到argparse模块。argparse 是 Python 内置的一个用于命令项选项与参数解析的模块,通过在程序中定义好我们需要的参数,argparse 将会…

【FPGA笔记系列3】assign语句和if-esle语句

结构化建模 前面几节中采用的方法称为结构化建模。 assign语法(数据流建模方式) assign语句仅能描述组合逻辑电路,没有涉及时钟、触发器等! 五人投票电路(由于CGD100板子原因,需修改逻辑使按下点亮,弹起熄灭) 因为板子当key按下时为低电平,弹起时为高电平;led高电平点…

MyBatis查询接收数据 批量删除

MyBatis查询接收数据 批量删除查询出的数据只有一条通过实体类对象接收通过List集合接收通过map集合接收查询出的数据有多条通过list集合接收通过map类型的list集合接收MapKey注解模糊查询批量删除${}和#{}的区别查询出的数据只有一条 通过实体类对象接收 mapper接口代码: 映射…

Lr 12 ACR 15:传统蒙版工具

在 Lr 或 ACR 中,可以用各种不同的方式创建或添加蒙版。其中主题、天空、背景、对象及人物(若照片上有)都是由 AI 技术提供支持。画笔、线性渐变、径向渐变、范围等是传统的蒙版工具。画笔Brush手动绘制要选择的区域。创建一个画笔&#xff1…

C#,图像二值化(24)——局部阈值算法的NiBlack算法及源程序

1、局部阈值算法的NiBlack算法摘要-医学图像的处理最为复杂人和计算机。磁性捐赠的脑组织共振成像(MRI)在许多领域是非常重要的问题例如手术和治疗。最常见的分割图像的最简单方法是使用阈值。在这项工作中,我们提出了一个有效的实现阈值&…

SpringBoot整合Mybatis和MybatisPlus

目录 一、整合MyBatis操作 1、配置模式 2、注解模式 3、混合模式 二、整合 MyBatis-Plus 完成CRUD 1、什么是MyBatis-Plus 2、整合MyBatis-Plus 3、CRUD功能 一、整合MyBatis操作 官网:MyBatis GitHub SpringBoot官方的Starter:spring-boot-st…

兼容东西,贯通南北:超聚变的“四水归堂”

四水归堂,是中国建筑艺术中的一种独特形式。这种形式下,由四面房屋围出一个天井,房屋内侧坡向天井内倾斜,下雨时雨水会从东西南北四方流入天井,从而起到收集水源,防涝护屋的作用,寓意水聚天心&a…

每日一问-ChapGPT-20230114-关于小年

文章目录每日一问-ChapGPT系列起因每日一问-ChapGPT-20230114-关于小年腊月每天都做些什么的歌谣为什么现在的年味淡了很多,感觉不到过年为什么春节放假要调休,不能多放几天吗说说现在世界上极端气候,以及多少年后,地球存在不适宜…

Asp.Net项目的部署到Linux中(Linux + Jexus+Nginx )

因为老项目用的Asp.Net Web API技术开发部署到Window系统上,而新项目用的是.Net Core部署到Ubuntu系统中,所以在管理切换上有些不便。于是决定将老项目的测试服部署到Ubuntu中,试试水。 一、简述 要实现Asp.Net项目部署到Linux中&#xff0c…

C语言入门教程|| C语言 程序结构|| C语言 基本语法

在我们学习 C 语言的基本构建块之前,让我们先来看看一个最小的 C 程序结构,在接下来的章节中可以以此作为参考。 C 程序主要包括以下部分: 预处理器指令函数变量语句 & 表达式注释 让我们看一段简单的代码,可以输出单词 &qu…

Anfis-基于模糊推理的自适应神经网络程序(免费分享)

输出结果展示:完整代码:clear;close all;gamma0.75;%设定惯性因子eps10.005;%设定停止训练的条件参数m18;%设定隶属函数个数m28;a-1;b1;w0a(b-a)*rand(1,m1*m2);%初始化权值阵for i1:2switch icase 1,beta0.75;%设定学习率otherwise,beta0.25;endc[2/7*(…

ESP-IDF:链表例程实现创建,增加,打印数据成员,释放链表空间等功能

链表例程: typedef struct LISTNODE { void *data_p; LISTNODE *next; } mlistnode; typedef struct MYLIST { int size; mlistnode *head; } mylist; mylist *initial_mylist() { mylist *p (mylist *)malloc(sizeof(mylist)); p->size 0; p->head (ml…

下载指定的tomcat版本和配置

如何下载指定的tomcat版本 tomcat官网:https://archive.apache.org/ tomcat指定版本下载地址:https://archive.apache.org/dist/tomcat/ 找到指定的版本,例如这里要找到tomcat8.0.1 bin是二进制文件,src是源码文件 配置tomcat环境变量 t…

Paddle进阶实战系列(二):智慧交通预测系统

✨写在前面:强烈推荐给大家一个优秀的人工智能学习网站,内容包括人工智能基础、机器学习、深度学习神经网络等,详细介绍各部分概念及实战教程,通俗易懂,非常适合人工智能领域初学者及研究者学习。➡️点击跳转到网站。…