python的分叉图

Kil*_*ian 5 python

我是一个初学者,我的英语说得不太好,对此感到抱歉。我想绘制该序列的分叉图:x(n + 1)= u x(n)(1-x(n)),其中x(0)= 0.7且u在0.7到4之间。

我应该得到这样的东西:

https://i.stack.imgur.com/T4gyF.png

因此,对于u的每个值,我想计算该序列的累加点。这就是为什么我想编写一些可以显示每个点(u; x1001),(u; x1002)...(u; x1050)的东西的原因。

我是这样做的:

import matplotlib.pyplot as plt
import numpy as np
P=np.linspace(0.7,4,10000)
m=0.7
Y=[m]
l=np.linspace(1000,1050,51)
for u in P:
    X=[u]
    for n in range(1001):
      m=(u*m)*(1-m)
    break 
    for l in range(1051):
      m=(u*m)*(1-m)
      Y.append(m)
plt.plot(X,Y)
plt.show()
Run Code Online (Sandbox Code Playgroud)

而且,我得到一个空白图形。

这是我尝试编写代码的第一件事,但是我对Python尚不了解,所以我需要帮助。

Pie*_*uyl 5

您的代码中存在一些问题。尽管您遇到的问题是代码审查问题,但是生成分叉图是一个普遍关心的问题(它可能需要在scicomp上重新定位,但我不知道如何正式提出要求)。

import matplotlib.pyplot as plt
import numpy as np
P=np.linspace(0.7,4,10000)
m=0.7
# Initialize your data containers identically
X = []
Y = []
# l is never used, I removed it.
for u in P:
    # Add one value to X instead of resetting it.
    X.append(u)
    # Start with a random value of m instead of remaining stuck
    # on a particular branch of the diagram
    m = np.random.random()
    for n in range(1001):
      m=(u*m)*(1-m)
    # The break is harmful here as it prevents completion of
    # the loop and collection of data in Y 
    for l in range(1051):
      m=(u*m)*(1-m)
    # Collection of data in Y must be done once per value of u
    Y.append(m)
# Remove the line between successive data points, this renders
# the plot illegible. Use a small marker instead.
plt.plot(X, Y, ls='', marker=',')
plt.show()
Run Code Online (Sandbox Code Playgroud)

同样,X在这里是无用的,因为它包含P的副本。