使用Sympy在python中绘制分叉图

时间:2015-11-17 22:59:39

标签: python numpy plot sympy differential-equations

我正在查看Cyrille Rossant编写的食谱配方,其中绘制了混沌动力系统的分叉图。他使用直接numpy来计算解决方案,但我想知道如何使用SymPy绘制相同的解决方案?如果可以的话,我真的很想使用SymPy绘制分叉图。 Cyrille使用下面的形式的逻辑方程。请注意,他也绘制了lyapunov指数。

f_r(x) = rx(1-x)

用于求解和绘制该等式的递归关系是:

x_{n+1}^{(r)} = f_r(x_{n}^{(r)}) = rx_{n}^{(r)}(1 - x_{n}^{(r)})

代码如下:

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline #for the ipython notebook

# Define the logistic function

def logistic(r, x):
    return(r*x*(1-x))

# Now feed the function our data.

n = 10000
r = np.linspace(2.5, 4.0, n)
iterations = 1000
last = 100

## initialize the system

x = 1e-5*np.ones(n)

# first we initialize the lyapunov vector
lyapunov = np.zeros(n)

# now we simulate the system and plot the diagram

plt.subplot(211)
for i in range(iterations):
    x = logistic(r,x)

## we compute the partial sum of the lyapunov exponent

lyapunov += np.log(abs(r-2*r*x))

#we display the bifurcation diagram
if i >= (iterations - last):
    plt.plot(r,x, ',k', alpha=0.02)
plt.xlim(2.5,4)
plt.title("Bifurcation diagram")

# We display the Lyapunov exponent
plt.subplot(212)
plt.plot(r[lyapunov < 0], lyapunov[lyapunov< 0]/iterations, ',k', alpha=0.01)
plt.plot(r[lyapunov >= 0], lyapunov[lyapunov>= 0]/iterations, ',k',   
alpha=0.25)
plt.xlim(2.5,4)
plt.ylim(-2,1)
plt.title("Lyapunov Exponent")

同样,我想将此代码转换为使用SymPy。

0 个答案:

没有答案