python--实现Lorenz 63模式

简介: python--实现Lorenz 63模式

通过python实现Lorenz 63模式(Lorenz,1963):


4256d84272f946b1be521ff416b54600.png


其中 σ , ρ 和 β 是参数,分别设置为10,28,8/3。 而x,y,z是模式状态变量,在模式中记为矢量 x→ 的三个元素 x1 , x2 , x3 可以使用数值方法求解常微分方程(欧拉法或者Runge-Kutta都可以,这里使用RK45方法),从初值求得步长 δt 后的x状态:


def RK45(x,func,h):
    K1=func(x);
    K2=func(x+h/2*K1);
    K3=func(x+h/2*K2);
    K4=func(x+h*K3);
    x1=x+h/6*(K1+2*K2+2*K3+K4);
    return x1
def L63_rhs(x):
    # ODE右端项
    import numpy as np
    dx=np.ones_like(x);
    sigma=10.0; rho=28.0;beta=8/3;   # default parameters
    dx[0]=sigma*(x[1]-x[0])
    dx[1]=rho*x[0]-x[1]-x[0]*x[2];
    dx[2]=x[0]*x[1]-beta*x[2]
    return dx
def L63_adv_1step(x0,delta_t):
    # 使用RK45求解ODE,从初值x0求得步长delta_t后的x状态
    x1=RK45(x0,L63_rhs,delta_t)
    return x1


调用 L63_adv_1step 可以积分模式,测试以x0为初值积分5000步,图像如下,称为洛伦茨吸引子(蝴蝶效应)


import numpy as np
# 模式积分
x0 = np.array([1.508870, -1.531271, 25.46091])
Xtrue = np.zeros([3000,3]);Xtrue[0]=x0
delta_t=0.01
for j in range(1,3000):
    Xtrue[j] = L63_adv_1step(Xtrue[j-1],delta_t)
# 画图    
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
mpl.rcParams['legend.fontsize'] = 10
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot(Xtrue[:,0], Xtrue[:,1], Xtrue[:,2],'r', label='Lorenz 63 model')
ax.legend()
plt.xlabel('x');plt.ylabel('y');
ax.set_zlabel('z')


65110ffaf1764ea4bbebe5b0697eaf69.png


Lorenz63模式具有强非线性,即使初值进行微小的扰动,也能对积分的结果造成巨大影响


# 模式积分
x0p = x0+0.001
Xctl = np.zeros([3000,3]);Xctl[0]=x0p
for j in range(1,3000):
    Xctl[j] = L63_adv_1step(Xctl[j-1],delta_t)
# 画图部分    
fig = plt.figure(figsize=(10,5))
plt.subplot(1,2,1)
plt.plot(Xtrue[range(1000),1], Xtrue[range(1000),2],'r', label='Truth')
plt.plot(Xtrue[0,1], Xtrue[0,2],'bx',ms=10,mew=3)
plt.plot(Xtrue[1000,1], Xtrue[1000,2],'bo',ms=10)
plt.ylim(0,50);plt.title('True',fontsize=15);plt.ylabel('z');plt.xlabel('y')
plt.text(5,25,r'$x_0$',fontsize=14)
plt.grid()
plt.subplot(1,2,2)
plt.plot(Xctl[range(1000),1], Xctl[range(1000),2],'g')
plt.plot(Xctl[0,1], Xctl[0,2],'bx',ms=10,mew=3,label='t0')
plt.plot(Xctl[1000,1], Xctl[1000,2],'bo',ms=10,label='t')
plt.ylim(0,50);plt.title('Control',fontsize=15);plt.ylabel('z');plt.xlabel('y')
plt.grid();plt.legend()
plt.text(5,25,r'$x_0+0.001$',fontsize=14)


7cc02ed7611c4803955133796669f86a.png


"X"代表初始状态,左右两边的初值只相差0.001。模式积分不久,两边的差异就非常大了。 正是在于模式具有这种混沌性质,微小的初始偏差能够造成巨大的预报误差,需要使用同化手段利用现实的观测纠正模式,或者提供更精准的初值。

相关文章
|
20天前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
25天前
|
数据可视化 算法 JavaScript
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
本文探讨了如何利用图论分析时间序列数据的平稳性和连通性。通过将时间序列数据转换为图结构,计算片段间的相似性,并构建连通图,可以揭示数据中的隐藏模式。文章介绍了平稳性的概念,提出了基于图的平稳性度量,并展示了图分区在可视化平稳性中的应用。此外,还模拟了不同平稳性和非平稳性程度的信号,分析了图度量的变化,为时间序列数据分析提供了新视角。
53 0
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
|
2月前
|
算法 数据挖掘 Python
Python中的拟合技术:揭示数据背后的模式
Python中的拟合技术:揭示数据背后的模式
40 0
Python中的拟合技术:揭示数据背后的模式
|
16天前
|
Python
探索Python中的异步编程模式
【10月更文挑战第29天】在编程世界中,时间就是效率。Python的异步编程模式,就像是给程序装上了翅膀,让任务并行处理不再是梦想。本文将带你了解如何在Python中实现异步编程,解锁高效代码的秘密。
25 0
|
2月前
|
IDE JavaScript Java
Processing介绍及几个python模式下的案例
该文章介绍了Processing这一开源编程语言和环境,主要用于视觉艺术和设计领域,并提供了Python模式下的编程案例。
45 5
|
2月前
|
设计模式 安全 API
探索Python中的异步编程模式
【9月更文挑战第19天】在本文中,我们将深入探讨Python的异步编程世界。通过理解其背后的原理和实践应用,你将学会如何编写更加高效、响应更快的程序。文章将引导你从基础概念出发,逐步过渡到高级用法,确保你能够自信地运用异步特性来优化你的代码。
|
1月前
|
设计模式 机器学习/深度学习 算法
现代 Python:编写高效代码的模式、功能和策略(第 1 部分)
现代 Python:编写高效代码的模式、功能和策略(第 1 部分)
28 0
|
2月前
|
Python Windows
Python交互模式
Python交互模式。
16 1
|
3月前
|
存储 中间件 PHP
Python编程入门:从零到一的代码实践深入理解 PHP 中的中间件模式
【8月更文挑战第28天】本文旨在通过浅显易懂的方式,向初学者介绍Python编程的基础知识,并结合具体代码示例,带领读者一步步实现从零基础到能够独立编写简单程序的转变。文章将围绕Python语言的核心概念进行讲解,并通过实例展示如何应用这些概念解决实际问题。无论你是编程新手还是希望扩展技能的专业人士,这篇文章都将为你打开编程世界的大门。 【8月更文挑战第28天】在PHP的世界中,设计模式是构建可维护和可扩展软件的重要工具。本文将通过浅显易懂的语言和生动的比喻,带领读者深入理解中间件模式如何在PHP应用中发挥魔力,实现请求处理的高效管理。我们将一步步揭开中间件的神秘面纱,从它的定义、工作原理到
|
4月前
|
数据可视化 Python
时间序列分析是一种统计方法,用于分析随时间变化的数据序列。在金融、经济学、气象学等领域,时间序列分析被广泛用于预测未来趋势、检测异常值、理解周期性模式等。在Python中,`statsmodels`模块是一个强大的工具,用于执行各种时间序列分析任务。
时间序列分析是一种统计方法,用于分析随时间变化的数据序列。在金融、经济学、气象学等领域,时间序列分析被广泛用于预测未来趋势、检测异常值、理解周期性模式等。在Python中,`statsmodels`模块是一个强大的工具,用于执行各种时间序列分析任务。