LoginSignup
0
2

More than 3 years have passed since last update.

ロジスティック写像の時系列をpythonで表す(折れ線グラフ)

Last updated at Posted at 2021-04-08

ロジスティック写像の時系列

ロジスティック写像とは以下で表される1次元写像のことである。
パラメータaの値が大きくなると軌道がカオスになることで有名である。

f(x) = x_{n+1} = ax_n(1-x_n)\\
(0 \le a \le4)

横軸をn(ステップ数150回とする)、縦軸を x として、x の時系列を求めたい。(a = 4 のとき)
今回はロジスティック写像の時系列のプログラムを詳しく説明する。

時系列を折れ線グラフで表す

import matplotlib.pyplot as plt

x = [0.8]
a = 4.0
n = [0] 
for i in range(1,151):
    x.append(a * x[-1] * (1 - x[-1]))
    n.append(i)

plt.plot(n,x)
plt.xlabel("n")
plt.ylabel("x")
plt.show()

スクリーンショット 2021-04-08 12.07.39.png

解説

⒈ グラフを作成するために必要なライブラリをインポート

import matplotlib.pyplot as plt

⒉ 初期値を設定
  最後にグラフにするときにxのリストとnのリストの値の数が同じになるようにステップnの初期値も、n=[0]を入れておく。

a = 4.0
x = [0.8]
n = [0]

⒊ for文で150回繰り返し
 appendでxとnのリストの中に150個の値を追加する。
 ここで、初期値n=[0]がもともと入っているため、nのリストには1から追加できるようにrange(1,151)で、1から150回繰り返せるようにする。
 それにより、for文の中のxはx[i]と表現してしまうと、for文の1回目の実行でx[1]がありませんというエラーが出てしまうため、x[-1]という表現にする。(これはxのリストの中で一番右にある値を表す。)

for i in range(1,151):
    x.append(a * x[-1] * (1 - x[-1]))
    n.append(i)

⒋ グラフを出力

plt.plot(n,x)
plt.xlabel("n")
plt.ylabel("x")
plt.show()

散布図

ちなみにfor分の中でplt.plotをすると以下のような散布図になってしまうので注意

import matplotlib.pyplot as plt

a = 4.0
x = [0.8]    
for i in range(150):
    x.append(a * x[i] * (1 - x[i]))
    plt.plot(n, x[i], "c.")

plt.xlabel("n")
plt.ylabel("x")
plt.show()

スクリーンショット 2021-04-08 11.32.57.png

パラメータaの値を変えると、固定点に収束したり周期点に収束したりなど様々な振る舞いをすることが分かる。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2