Advertisement
Danila_lipatov

kop-2

Apr 15th, 2024
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.80 KB | None | 0 0
  1. from sympy import *
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4. # Функция для генерации фрактала множества Кантора для n итераций def cantor_set(n):
  5. def cantor_set(n, k):
  6. segments = [[k, k + 1]] # Рассматриваем интервал [0;1] for i in range(n):
  7. for i in range(n):
  8. new_segments = [] # Создайте пустой список для хранения новых интервалов for segment in segments:
  9. for segment in segments:
  10. length = segment[1] - segment[0] # Вычисляем длину интервала
  11. left_third = [segment[0], segment[0] + length/3] # Разделяем интервал на треть и оставляем левую треть
  12. right_third = [segment[1] - length/3, segment[1]] # Разделяем интервал на треть и оставляем правую треть
  13. new_segments.append(left_third) # Добавьте левую треть в список новых интервалов
  14. new_segments.append(right_third) # Добавьте правую треть в список новых интервалов
  15. segments = new_segments #Замените старый список интервалов новым return segments
  16. return segments
  17. # Функция для вычисления длины набора Кантора для n итераций def length_cantor_set(n):
  18. def length_cantor_set(n):
  19. return (2/3)**n
  20. # Функция для построения фрактала множества Кантора для n итераций def plot_cantor_set(n):
  21. def plot_cantor_set(n, k):
  22. segments = cantor_set(n, k) # Генерируем фрактал множества Кантора для n итераций for segment in segments:
  23. for segment in segments:
  24. plt.plot(segment, [0, 0], color='black') # Строим каждый интервал как горизонтальную линию при y = 0
  25. plt.xlim([0, 1]) # Установить ограничение по оси x на [0;1]
  26. plt.ylim([-0.1, 0.1]) # Установить пределы оси Y на [-0,1;0,1], чтобы центрировать график
  27. plt.show() # Вывод графика
  28.  
  29. # Функция для построения длины набора Кантора для n итераций def plot_length_cantor_set(n):
  30. def plot_length_cantor_set(n):
  31. lengths = [length_cantor_set(i) for i in range(1, n+1)] # Вычислите длину набора Кантора для каждой итерации
  32. plt.plot(range(1, n+1), lengths, color='black') # Построение длины набора Кантора в зависимости от количества итераций
  33. plt.xlabel('Количество итераций')
  34. plt.ylabel('Длина набора Кантора')
  35. plt.show() # Вывод графика
  36.  
  37. # Функция для вычисления Хаусдорфовой размерности канторовского множества def hausdorff_dimension(n):
  38. def hausdorff_dimension(n):
  39. n_intervals = 2 ** n
  40. interval_length = (1 / 3) ** n
  41. N = 0
  42. for i in range(n_intervals):
  43. x = i * interval_length
  44. for j in range(n_intervals):
  45. y = j * interval_length
  46. if abs(x - y) < interval_length:
  47. N += 1
  48. L = interval_length
  49. return log(N) / log(1/L) # Рассчет размерности Хаусдорфа
  50.  
  51. if __name__ == '__main__':
  52. a = int(input())
  53. k = int(input())
  54. # for n in range(1, a + 1):
  55. plot_cantor_set(a, k)
  56. plot_length_cantor_set(a)
  57. print("Размерность Хаусдорфа: ", hausdorff_dimension(a))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement