-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHenon_attractor_BCD
More file actions
40 lines (35 loc) · 948 Bytes
/
Henon_attractor_BCD
File metadata and controls
40 lines (35 loc) · 948 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import matplotlib.pyplot as plt
import scipy.optimize as opt
import numpy as np
n = 100000
m = 7
e0 = 1/2
a,b = 1.4, 0.3
x,y = 0,0
for i in range(1,201):
x,y = a-x**2+b*y,x
S = []
for j in range(n):
x,y = a-x**2+b*y,x
xj,yj = x,y
S.append((xj,yj))
S1 = np.array(S)
evals = []
Nvals = []
for k in range(1,m+1):
e = e0**k
S2 = np.floor(S1/e)
S3 = [tuple(l) for l in S2.tolist()]
N = len(list(set(S3)))
print(e, N)
evals.append(log(1/e))
Nvals.append(log(N))
evals2 = np.array(evals)
Nvals2 = np.array(Nvals)
matrix = np.vstack([evals2, np.ones(len(evals2))]).T
D, C = np.linalg.lstsq(matrix, Nvals2, rcond=None)[0]
print('The estimated value of the box-counting dimension is D =', D)
plt.plot(evals2, Nvals2, "bo", label="Data")
plt.plot(evals2, D*evals2 + C, 'r', label='Fitted line')
plt.title("Plot of ln N(epsilon) against ln(1/epsilon) with least-squares fit")
plt.legend(loc="upper left")