# Python蛛网图可视化函数迭代

{% content-ref url="../gong-cheng-engineering/julia-he-python-zhu-wang-tu-gui-dao-tu-pang-jia-lai-jie-mian-qu-mian-que-ding-xing-fei-xian-xing-xi" %}
[julia-he-python-zhu-wang-tu-gui-dao-tu-pang-jia-lai-jie-mian-qu-mian-que-ding-xing-fei-xian-xing-xi](../gong-cheng-engineering/julia-he-python-zhu-wang-tu-gui-dao-tu-pang-jia-lai-jie-mian-qu-mian-que-ding-xing-fei-xian-xing-xi)
{% endcontent-ref %}

{% embed url="https://viadean.notion.site/Python-36572c263dcb43fa9a0b7645549ce789" %}

{% content-ref url="../zhi-dian-mi-jin-brief" %}
[zhi-dian-mi-jin-brief](../zhi-dian-mi-jin-brief)
{% endcontent-ref %}

对于函数 f 和起始点 x，您可以照常绘制 (x, f(x))。 然后，由于 f(x) 将是 x 的下一个值，因此您可以通过绘制从 (x, f(x)) 到 (f(x), f(x)) 的水平线将其转换为 x。 换句话说，通过移动到水平线与线 y = x 相交的位置，可以将先前的 y 值转换为 x 值。 然后从新的 x 上升到应用于新 x 的 f。 下面的 Python 代码使这一切变得明确。

```
    import matplotlib.pyplot as plt
     from scipy import cos, linspace
     
     def cobweb(f, x0, N, a=0, b=1):
 ​
         t = linspace(a, b, N)
         plt.plot(t, f(t), 'k')
         plt.plot(t, t, "k:")
         x, y = x0, f(x0)
         for _ in range(N):
             fy = f(y)        
             plt.plot([x, y], [y,  y], 'b', linewidth=1)
             plt.plot([y, y], [y, fy], 'b', linewidth=1)
             x, y = y, fy
             
         plt.axes().set_aspect(1) 
         plt.show()
         plt.close()
```

```
     cobweb(cos, 1, 20)
```

生成从 x = 1 开始的 20 次余弦迭代的蛛网图。有一个固定点，蛛网图螺旋进入该固定点。接下来让我们看看不同 r 值时逻辑映射 f(x) = rx(1 – x) 的几次迭代。

```
     cobweb(lambda x: 2.9*x*(1-x), 0.1, 100)
     cobweb(lambda x: 3.1*x*(1-x), 0.1, 100)
     cobweb(lambda x: 3.1*x*(1-x), 0.558, 100)
     cobweb(lambda x: 4.0*x*(1-x), 0.1, 100)
```

如果 r ≤ 3，Logistic 映射也有一个稳定不动点。在下图中，r = 2.9。

接下来我们设置 r = 3.1。我们从 x = 0.1 开始并收敛到两个吸引点。

如果我们正好从其中一个吸引点开始，蛛网图就只是一个正方形。

最后，当我们设置 r = 4 时，我们就处于混沌区域。

