用Python Matplotlib实现可视化混沌系统

	二十世纪的三大科学发现分别是:混沌、相对论和量子力学。爱因斯坦创立的相对论统一了时空观,普朗克等科学家发现的量子力学揭示了微观世界的不可观测性,而Lorenz提出的混沌预示着**确定性系统中蕴含着随机性**。
	预备知识:
			动力系统:是数学上的一个概念。在动力系统中存在着一个固定的规则,描述了几何空间中的一个**点随时间演化**情况。
			例:描述钟摆的晃动、管道中水的流动,或者湖中每年春季鱼类的数量等的数学模型都是动力系统。
	在数学中,一个动力系统被称为是自治的,当且仅当这个系统由一组常微分方程组成,并且这些方程的表达式与动力系统的自变量无关。
	在有关物理的动力系统中,自变量通常是时间。这时自治系统通常表示其中的物理规律不再随时间变化的系统,也就是说空间中每一点的性质在过去、现在和将来都是一样的。
	著名的Lorenz系统是如下所示的一阶微分方程组,这是第一个被发现的混沌系统。

在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/25cc4d544d434d3ca61a063add4ac799.png在这里插入图片描述这里有三个参数,其中σ=10:普朗特数, ρ=28:是瑞利数, β=8/3:是方向比
Lorenz系统可以用作混沌伪随机数发生器,但是由于Lorenz系统是连续时间三维混沌系统,需要先借助于差分方法(比如龙格-库塔法)将其转换为离散时间差分方程组。
用Python实现Lorenz混沌系统的图示
在这里插入图片描述
代码如下:


```python
import matplotlib.pyplot as plt
#绘制三维图像


'''
Lorenz吸引子生成函数
参数为三个初始坐标,三个初始参数,迭代次数
返回三个一维list
'''
def Lorenz(x0,y0,z0,p,q,r,T):
  #微分迭代步长
  h=0.01
  x=[]
  y=[]
  z=[]
  for t in range(T):
    xt=x0+h*p*(y0-x0)
    yt=y0+h*(q*x0-y0-x0*z0)
    zt=z0+h*(x0*y0-r*z0)
    #x0、y0、z0统一更新
    x0,y0,z0=xt,yt,zt
    x.append(x0)
    y.append(y0)
    z.append(z0)
  return x,y,z

def main():
  #设定参数
  p=10
  q=28
  r=8/3
  #迭代次数
  T=10000
  #设初值
  x0=-16
  y0=-21
  z0=33
  # fig=plt.figure()
  # ax=p3d.Axes3D(fig)
  x,y,z=Lorenz(x0,y0,z0,p,q,r,T)
  ax=plt.subplot(121,projection="3d")
  ax.scatter(x,y,z,s=5)
  ax.set_xlabel('x(t)')
  ax.set_ylabel('y(t)')
  ax.set_zlabel('z(t)')
  ax.set_title('x0=-16 y0=-21 z0=33')
  # plt.axis('off')
  #消除网格

  ax.grid(False)
  #初值微小的变化
  x0=-16
  y0=-21
  z0=33.00001
  xx,yy,zz=Lorenz(x0,y0,z0,p,q,r,T)
  ax=plt.subplot(122,projection="3d")
  ax.scatter(xx,yy,zz,s=5)
  ax.set_xlabel('x(t)')
  ax.set_ylabel('y(t)')
  ax.set_zlabel('z(t)')
  ax.set_title('x0=-16 y0=-21 z0=33.00001')
  ax.grid(False)
  plt.show()

  t=np.arange(0,T)
  plt.scatter(t,x,s=1)
  plt.scatter(t,xx,s=1)
  plt.show()


if __name__=='__main__':
  main()


  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值