Tulisan ini menunjukkan bagaimana cara mendapatkan bifurcation diagram dari tent map menggunakan Octave, Python dan Julia.
Octave
close all
clear
clc
inline_if = @(varargin) varargin{2*find([varargin{1:2:end}],1,'first')};
tau = @(a,x) inline_if(0 <= x & x < 0.5,a*x,0.5<= x & x <= 1,a*(1-x));
xo = 0.6;
N = 101;
a_min = 1.001;
a_max = 1.999;
total_of_a = 5000;
a = linspace(a_min,a_max,total_of_a);
tic
no = 1;
X = zeros(1,length(a)*N);
A = zeros(1,length(a)*N);
for alpha = a
xinit = xo;
for i = 1:100
xinit = tau(alpha,xinit);
end
X(no) = xinit;
A(no) = alpha;
no += 1;
for j = 2:N
X(no) = tau(alpha,X(no-1));
A(no) = alpha;
no += 1;
end
end
toc
figure
plot(A,X,'k.','MarkerSize',0.5)
axis square
xlim([a_min a_max])
ylim([0 1])
clear
clc
inline_if = @(varargin) varargin{2*find([varargin{1:2:end}],1,'first')};
tau = @(a,x) inline_if(0 <= x & x < 0.5,a*x,0.5<= x & x <= 1,a*(1-x));
xo = 0.6;
N = 101;
a_min = 1.001;
a_max = 1.999;
total_of_a = 5000;
a = linspace(a_min,a_max,total_of_a);
tic
no = 1;
X = zeros(1,length(a)*N);
A = zeros(1,length(a)*N);
for alpha = a
xinit = xo;
for i = 1:100
xinit = tau(alpha,xinit);
end
X(no) = xinit;
A(no) = alpha;
no += 1;
for j = 2:N
X(no) = tau(alpha,X(no-1));
A(no) = alpha;
no += 1;
end
end
toc
figure
plot(A,X,'k.','MarkerSize',0.5)
axis square
xlim([a_min a_max])
ylim([0 1])
Julia
Untuk Julia, jangan lupa menginstall "PyPlot" dengan mengetik Pkg.add("PyPlot") di Julia Command Line anda.
using PyPlot
close()
function tau(a,x)
if 0.0 <= x < 0.5
return a*x
elseif 0.5 <= x <= 1.0
return a*(1-x)
end
end
function xnext(a,xo,N)
no = 1;
X = zeros(length(a)*N);
A = zeros(length(a)*N);
for alpha in a
xinit = xo;
for i = 1:200
xinit = tau(alpha,xinit)
end
X[no] = xinit;
A[no] = alpha;
no += 1;
for j = 2:N
X[no] = tau(alpha,X[no-1])
A[no] = alpha;
no += 1;
end
end
return A, X
end
xo = 0.6;
Num = 7;
a_min = 1.001;
a_max = 1.999;
total_of_a = 77000;
a = collect(a_min:(a_max-a_min)/(total_of_a-1):a_max);
tic()
A, X = xnext(a,xo,Num);
toc()
figure()
plot(A,X,".",markersize=0.5,color="black")
axis("square")
xlim(a_min,a_max)
ylim(0,1)
close()
function tau(a,x)
if 0.0 <= x < 0.5
return a*x
elseif 0.5 <= x <= 1.0
return a*(1-x)
end
end
function xnext(a,xo,N)
no = 1;
X = zeros(length(a)*N);
A = zeros(length(a)*N);
for alpha in a
xinit = xo;
for i = 1:200
xinit = tau(alpha,xinit)
end
X[no] = xinit;
A[no] = alpha;
no += 1;
for j = 2:N
X[no] = tau(alpha,X[no-1])
A[no] = alpha;
no += 1;
end
end
return A, X
end
xo = 0.6;
Num = 7;
a_min = 1.001;
a_max = 1.999;
total_of_a = 77000;
a = collect(a_min:(a_max-a_min)/(total_of_a-1):a_max);
tic()
A, X = xnext(a,xo,Num);
toc()
figure()
plot(A,X,".",markersize=0.5,color="black")
axis("square")
xlim(a_min,a_max)
ylim(0,1)
Python
import matplotlib.pyplot as plt
import numpy as np
import time as tm
plt.close()
def tau(a,x):
if 0.0 <= x < 0.5:
return a*x
elif 0.5 <= x <= 1:
return a*(1-x)
def xnext(a,xo,N):
no = 0
X = np.zeros(a.size*N)
A = np.zeros(a.size*N)
for alpha in a:
xinit = xo
for i in range(200):
xinit = tau(alpha,xinit)
X[no] = xinit
A[no] = alpha
no += 1
for j in range(1,N):
X[no] = tau(alpha,X[no-1])
A[no]= alpha
no += 1
return A, X
xo = 0.6
Num = 7
a_min = 1.001
a_max = 1.999
total_of_a = 77000
a = np.linspace(a_min,a_max,total_of_a)
tic = tm.time()
A, X = xnext(a,xo,Num)
toc = tm.time()
print('elapsed time: %.4f seconds' % (toc-tic))
fig = plt.figure()
plt.plot(A,X,".",markersize=0.5,color="black")
plt.xlim(a_min,a_max)
plt.ylim(0,1)
plt.gca().set_aspect('equal', adjustable='box')
plt.show()
import numpy as np
import time as tm
plt.close()
def tau(a,x):
if 0.0 <= x < 0.5:
return a*x
elif 0.5 <= x <= 1:
return a*(1-x)
def xnext(a,xo,N):
no = 0
X = np.zeros(a.size*N)
A = np.zeros(a.size*N)
for alpha in a:
xinit = xo
for i in range(200):
xinit = tau(alpha,xinit)
X[no] = xinit
A[no] = alpha
no += 1
for j in range(1,N):
X[no] = tau(alpha,X[no-1])
A[no]= alpha
no += 1
return A, X
xo = 0.6
Num = 7
a_min = 1.001
a_max = 1.999
total_of_a = 77000
a = np.linspace(a_min,a_max,total_of_a)
tic = tm.time()
A, X = xnext(a,xo,Num)
toc = tm.time()
print('elapsed time: %.4f seconds' % (toc-tic))
fig = plt.figure()
plt.plot(A,X,".",markersize=0.5,color="black")
plt.xlim(a_min,a_max)
plt.ylim(0,1)
plt.gca().set_aspect('equal', adjustable='box')
plt.show()