def linspace(start, stop, n): if n == 1: yield stop return h = (stop - start) / (n - 1) for i in range(n): yield start + h * i def mandelbrot_1(pmin = -2.5, pmax= 1.5, qmin = -2, qmax= 2, ppoints = 200, qpoints = 200, max_iterations = 300, infinity_border = 100): image = [[0 for i in range(qpoints)] for j in range(ppoints)] for ip, p in enumerate(linspace(pmin, pmax, ppoints)): for iq, q in enumerate(linspace(qmin, qmax, qpoints)): c = p + 1j * q z = 0 for k in range(max_iterations): z = z ** 2 + c if abs(z) > infinity_border: image[ip][iq] = 1 break return image def linspace(start, stop, n): if n == 1: yield stop return h = (stop - start) / (n - 1) for i in range(n): yield start + h * i def mandelbrot_2(pmin: float = -2.5, pmax: float = 1.5, qmin: float = -2, qmax: float = 2, ppoints: int = 200, qpoints: int = 200, max_iterations: int = 300, infinity_border: float = 100) -> list[list[int]]: image: list[list[int]] = [[0 for i in range(qpoints)] for j in range(ppoints)] for ip, p in enumerate(linspace(pmin, pmax, ppoints)): for iq, q in enumerate(linspace(qmin, qmax, qpoints)): c: complex = p + 1j * q z: complex = 0 for k in range(max_iterations): z = z ** 2 + c if abs(z) > infinity_border: image[ip][iq] = 1 break return image import numpy as np def mandelbrot_3(pmin = -2.5, pmax = 1.5, qmin = -2, qmax = 2, ppoints = 200, qpoints = 200, max_iterations = 300, infinity_border= 100): image = np.zeros((ppoints, qpoints)) for ip, p in enumerate(np.linspace(pmin, pmax, ppoints)): for iq, q in enumerate(np.linspace(qmin, qmax, qpoints)): c = p + 1j * q z = 0 for k in range(max_iterations): z = z ** 2 + c if abs(z) > infinity_border: image[ip, iq] = 1 break return image import time if __name__ == '__main__': tic = time.perf_counter_ns() image = mandelbrot_1() toc = time.perf_counter_ns() print((toc - tic)/1_000_000_000, "s - checked_1") tic = time.perf_counter_ns() image = mandelbrot_2() toc = time.perf_counter_ns() print((toc - tic)/1_000_000_000, "s - checked_2") tic = time.perf_counter_ns() image = mandelbrot_3() toc = time.perf_counter_ns() print((toc - tic)/1_000_000_000, "s - checked_3")