我是一个初学者,我的英语说得不太好,对此感到抱歉。我想绘制该序列的分叉图:x(n + 1)= u x(n)(1-x(n)),其中x(0)= 0.7且u在0.7到4之间。
我应该得到这样的东西:
因此,对于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尚不了解,所以我需要帮助。
您的代码中存在一些问题。尽管您遇到的问题是代码审查问题,但是生成分叉图是一个普遍关心的问题(它可能需要在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的副本。
| 归档时间: |
|
| 查看次数: |
4365 次 |
| 最近记录: |