我是初学者,我不会说英语,所以很抱歉。 我想绘制序列的分叉图: 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()
而且,我得到一张空白图片。
这是我尝试编码的第一件事,我在Python中什么都不知道,所以我需要帮助。
答案 0 :(得分:4)
您的代码中存在一些问题。虽然你遇到的问题是代码审查问题,但生成分叉图是一个普遍感兴趣的问题(它可能需要在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()
此外,X在这里没用,因为它包含P的副本。
答案 1 :(得分:0)
要以png格式保存分叉图,您可以尝试使用this简单代码。
# Bifurcation diagram of the logistic map
import math
from PIL import Image
imgx = 1000
imgy = 500
image = Image.new("RGB", (imgx, imgy))
xa = 2.9
xb = 4.0
maxit = 1000
for i in range(imgx):
r = xa + (xb - xa) * float(i) / (imgx - 1)
x = 0.5
for j in range(maxit):
x = r * x * (1 - x)
if j > maxit / 2:
image.putpixel((i, int(x * imgy)), (255, 255, 255))
image.save("Bifurcation.png", "PNG")