Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from sympy import *
- import matplotlib.pyplot as plt
- import numpy as np
- # Функция для генерации фрактала множества Кантора для n итераций def cantor_set(n):
- def cantor_set(n, k):
- segments = [[k, k + 1]] # Рассматриваем интервал [0;1] for i in range(n):
- for i in range(n):
- new_segments = [] # Создайте пустой список для хранения новых интервалов for segment in segments:
- for segment in segments:
- length = segment[1] - segment[0] # Вычисляем длину интервала
- left_third = [segment[0], segment[0] + length/3] # Разделяем интервал на треть и оставляем левую треть
- right_third = [segment[1] - length/3, segment[1]] # Разделяем интервал на треть и оставляем правую треть
- new_segments.append(left_third) # Добавьте левую треть в список новых интервалов
- new_segments.append(right_third) # Добавьте правую треть в список новых интервалов
- segments = new_segments #Замените старый список интервалов новым return segments
- return segments
- # Функция для вычисления длины набора Кантора для n итераций def length_cantor_set(n):
- def length_cantor_set(n):
- return (2/3)**n
- # Функция для построения фрактала множества Кантора для n итераций def plot_cantor_set(n):
- def plot_cantor_set(n, k):
- segments = cantor_set(n, k) # Генерируем фрактал множества Кантора для n итераций for segment in segments:
- for segment in segments:
- plt.plot(segment, [0, 0], color='black') # Строим каждый интервал как горизонтальную линию при y = 0
- plt.xlim([0, 1]) # Установить ограничение по оси x на [0;1]
- plt.ylim([-0.1, 0.1]) # Установить пределы оси Y на [-0,1;0,1], чтобы центрировать график
- plt.show() # Вывод графика
- # Функция для построения длины набора Кантора для n итераций def plot_length_cantor_set(n):
- def plot_length_cantor_set(n):
- lengths = [length_cantor_set(i) for i in range(1, n+1)] # Вычислите длину набора Кантора для каждой итерации
- plt.plot(range(1, n+1), lengths, color='black') # Построение длины набора Кантора в зависимости от количества итераций
- plt.xlabel('Количество итераций')
- plt.ylabel('Длина набора Кантора')
- plt.show() # Вывод графика
- # Функция для вычисления Хаусдорфовой размерности канторовского множества def hausdorff_dimension(n):
- def hausdorff_dimension(n):
- n_intervals = 2 ** n
- interval_length = (1 / 3) ** n
- N = 0
- for i in range(n_intervals):
- x = i * interval_length
- for j in range(n_intervals):
- y = j * interval_length
- if abs(x - y) < interval_length:
- N += 1
- L = interval_length
- return log(N) / log(1/L) # Рассчет размерности Хаусдорфа
- if __name__ == '__main__':
- a = int(input())
- k = int(input())
- # for n in range(1, a + 1):
- plot_cantor_set(a, k)
- plot_length_cantor_set(a)
- print("Размерность Хаусдорфа: ", hausdorff_dimension(a))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement