所以我一直在做一些来自成熟考试的练习,其中一个是画一条海威龙。
程序应该集中在两对变量上:
x‘= -0,4*x - 1
y‘= -0,4*y + 0,1
和
x‘= 0,76*x -0,4*y
y‘= 0,4*x + 0,76*y
在x= 1和y=1开始时,使用上面所示的随机取对公式(50/50机会)计算一个新的x和y,并在图表上标记点(x,y)。每件事都重复5000次。
所以我尝试使用python,但问题是,当我最终画了一条龙,在图表上,我可以看到它不是一个不变的绘图,但它有空白的区域,如下图所示。还是我犯了什么错?有什么办法让它看起来像正确的吗?
我的代码:
import matplotlib.pyplot as plt
import random
x = 1
y = 1
sumx = 0
sumy = 0
max_x = 0
max_y = 0
for i in range(5000):
rand = random.randint(0, 1)
if rand == 0:
x = (-0.4 * x) - 1
y = (-0.4 * y) + 0.1
else:
x = (0.76 * x) - (0.4 * y)
y = (0.4 * x) + (0.76 * y)
if i >= 100:
sumx += x
sumy += y
plt.plot(x, y, c='black', marker='P', markersize=6)
if x > max_x:
max_x = x
if y > max_y:
max_y = y
plt.show()
avg_x = sumx / 5000
avg_y = sumy / 5000
print(round(avg_x, 1), round(avg_y, 1))
print('maximum x: ' + str(max_x) + ', maximum y: ' + str(max_y))发布于 2020-03-31 15:57:02
如果坐标x'和y'确实是按照上面所写的方式计算的,那么您的代码就可以了(尽管我不知道为什么您只在迭代100次之后才开始绘图)。
然而,,调用pyplot的绘图函数在计算上是很昂贵的,因此我建议如下:
x和y值并将它们存储在列表中plt.scatter一次这样,代码的执行时间就大大提高了。我已经在下面的代码中这样做了,并且删除了i >= 100的条件。我还改变了生成随机数的方式,以查看这是否有效果,但它仍然产生了与原始代码非常相似的输出(参见下面的图像)。
import matplotlib.pyplot as plt
import random
import sys
x = 1
y = 1
sumx = 0
sumy = 0
max_x = 0
max_y = 0
x_values = []
y_values = []
for i in range(5000):
rand = random.uniform(0,1)
if rand <= 0.5:
x = ((-0.4 * x) - 1)
y = ((-0.4 * y) + 0.1)
x_values.append(x)
y_values.append(y)
else:
x = ((0.76 * x) - (0.4 * y))
y = ((0.4 * x) + (0.76 * y))
x_values.append(x)
y_values.append(y)
sumx += x
sumy += y
if x > max_x:
max_x = x
if y > max_y:
max_y = y
plt.scatter(x_values, y_values, c='black', marker='P')
plt.ylim([-1, 0.4])
plt.xlim([-1.5, 0.5])
plt.show()
avg_x = sumx / 5000
avg_y = sumy / 5000
print(round(avg_x, 1), round(avg_y, 1))
print('maximum x: ' + str(max_x) + ', maximum y: ' + str(max_y))

https://stackoverflow.com/questions/60950463
复制相似问题