我正在查看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。