绘制Logistic映射迭代序列时出现额外横向线条问题
问题解决:迭代序列绘图出现额外横向线条
问题根源
你代码里的n0数组长度为nsteps+1(101个元素),但循环仅给前100个元素赋值为0到99,最后一个元素n0[100]保持初始的0。而x数组是完整的101个值(从x₀到x₁₀₀),调用plt.plot(n0, x)时,最后一个数据点会从(99, x[99])连接到(0, x[100]),这就是那条额外横向线的由来。
两种修正方案
方案一:直接生成正确的n序列
用numpy.arange直接创建0到100的整数数组,替代循环赋值,更简洁高效:
n0 = np.arange(nsteps + 1)
方案二:切片匹配数组长度
如果保留原循环逻辑,绘图时只取n0和x的前100个元素(对应n从0到99,x从x₀到x₉₉):
plt.plot(n0[:-1], x[:-1], color='b', label=f"$k$ = {k:.1f}, $x(0)$ = {x0:.1f} ")
完整修正代码(方案一)
import numpy as np import matplotlib.pyplot as plt nsteps = 100 x0 = 0.5 k = 3.5 fig = plt.figure(figsize=(8, 6), dpi=100) x = np.zeros(nsteps + 1) n0 = np.arange(nsteps + 1) # 生成0到100的完整序列 x[0] = x0 for n in range(nsteps): x[n+1] = k*x[n]*(1.0 - x[n]) print(f'n = {n}, x(n) = {x[n]}') plt.plot(n0, x, color='b', label=f"$k$ = {k:.1f}, $x(0)$ = {x0:.1f} ") plt.legend(loc='lower right') plt.xlabel("n") plt.ylabel("x") plt.xlim(0,100) plt.show()
内容的提问来源于stack exchange,提问作者Rex
相关产品推荐
相关产品推荐

