95 lines
2.3 KiB
Python
95 lines
2.3 KiB
Python
from cmath import sin
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
|
def plot_logistic_map(r, x0, num_iterations):
|
|
x = [x0]
|
|
for _ in range(num_iterations):
|
|
x0 = logistic_map(r, x0)
|
|
x.append(x0)
|
|
|
|
plt.plot(range(num_iterations + 1), x, marker='o', linestyle='-')
|
|
plt.xlabel("Národy")
|
|
plt.ylabel("Hodnota x")
|
|
plt.title(f"Logistická mapa (r = {r})")
|
|
plt.show()
|
|
|
|
|
|
def logistic_map(r, x):
|
|
# return r * x * (1 - x) * (- x + 1)
|
|
return r * x * (1 - x)
|
|
|
|
|
|
def bifurcation_diagram(r_values, x0, num_iterations, num_transient, num_points):
|
|
all_x = []
|
|
all_r = []
|
|
|
|
for r in r_values:
|
|
x = x0
|
|
transient = []
|
|
stable = []
|
|
|
|
for i in range(num_iterations):
|
|
x = logistic_map(r, x)
|
|
|
|
if i >= num_transient:
|
|
transient.append(r)
|
|
stable.append(x)
|
|
|
|
all_x.extend(stable)
|
|
all_r.extend(transient)
|
|
|
|
plt.scatter(all_r, all_x, s=1, marker=".")
|
|
plt.xlabel("r")
|
|
plt.ylabel("Hodnota x")
|
|
plt.title("Bifurkační diagram")
|
|
plt.show()
|
|
|
|
|
|
def create_diagrams():
|
|
# Parametry
|
|
r = 6
|
|
r_values = [i / 1000 for i in range(1000, 6000)] # Rozsah hodnot r
|
|
x0 = 0.2 # Počáteční hodnota
|
|
num_iterations = 1000
|
|
num_transient = 100 # Počet přechodných iterací
|
|
num_points = 10000 # Počet bodů v diagramu
|
|
|
|
bifurcation_diagram(r_values, x0, num_iterations, num_transient, num_points)
|
|
plot_logistic_map(r, x0, 100)
|
|
|
|
|
|
def midpoint(point1, point2):
|
|
return ((point1[0] + point2[0]) / 2, (point1[1] + point2[1]) / 2)
|
|
|
|
|
|
def sierpinski_triangle(ax, depth, p1, p2, p3):
|
|
if depth == 0:
|
|
ax.plot(*p1, 'ro')
|
|
ax.plot(*p2, 'ro')
|
|
ax.plot(*p3, 'ro')
|
|
else:
|
|
p12 = midpoint(p1, p2)
|
|
p23 = midpoint(p2, p3)
|
|
p31 = midpoint(p3, p1)
|
|
|
|
sierpinski_triangle(ax, depth - 1, p1, p12, p31)
|
|
sierpinski_triangle(ax, depth - 1, p12, p2, p23)
|
|
sierpinski_triangle(ax, depth - 1, p31, p23, p3)
|
|
|
|
|
|
def main():
|
|
fig, ax = plt.subplots()
|
|
p1 = (0, 0)
|
|
p2 = (1, 0)
|
|
p3 = (0.5, (3 ** 0.5) / 2)
|
|
depth = 5 # Změňte tuto hodnotu pro různé úrovně fraktálu
|
|
|
|
sierpinski_triangle(ax, depth, p1, p2, p3)
|
|
ax.set_aspect('equal', adjustable='box')
|
|
plt.show()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|