Oi
Outro ensaio. Desta vez, vamos brincar com números complexos, com fórmulas e sua visualização.

Idéia
Um número complexo é uma certa extensão de um número real, de fato um vetor para o qual um conjunto inteiro de axiomas é definido. Qualquer número complexo (e, portanto, real) pode ser escrito como
onde a é a parte real, b é a parte imaginária, i é a raiz da equação
. Muitas operações são definidas para ele, definidas para um número real, por exemplo,
. Curiosamente, se você fizer várias operações com eles, aumente a potência, multiplique etc. e depois
(parte real) para o eixo Ox, e
(parte imaginária) para o eixo Oy, você pode obter imagens engraçadas.
A propósito, eu mesmo criei todas as seguintes fórmulas.
Função de visualização
Rotina. A função, que de acordo com esta função iterativa, desenha tudo no campo:
import random import numpy as np def vis(A, f, step=1.0, c=None): x = [] y = [] for B in np.arange(0, A, step): v = f(A, B) x.append(v.real) y.append(v.imag) plt.figure(figsize=[8, 8]) mxabs = max([i[0] ** 2 + i[1] ** 2 for i in zip(x, y)]) ** 0.5 x = np.array(x) / mxabs y = np.array(y) / mxabs if c is None: plt.scatter(x, y) else: plt.scatter(x, y, color=[c(x[i], y[i]) for i in range(len(x))]) plt.show()
Todas as nossas funções dependem de dois parâmetros A e B. Além disso, iteramos sobre B dentro de vis (), e A é o parâmetro global da função.
A função Curl
Sua declaração em python:
def func_1(A, B): return math.sin(B) * B * math.e ** (1j * (B * math.cos(A)))
E corra
A = 121.5 vis(A, func_1, step=0.1)
E o resultado para A = 121,5:

E para A = 221,5:

Observe que esses números não decorrem do cálculo de nenhuma integral definida em uma variedade suave e de outras palavras inteligentes que não têm sentido nesse contexto. Estes são números realmente aleatórios, e ainda existe exatamente o infinito de A diferentes, como resultado da qual a beleza é obtida.
Precisa pintar
Declaramos uma função de cor (tal função que retorna uma tupla de três números em coordenadas):
def sigm(x):
Escolha o parâmetro aleatório A, seja 149:
vis(149, func_1, step=0.1, c=color_1)

Função Gansos
Os gansos são descritos da seguinte forma:
Declaração Python:
def func_2(A, B): return math.cos(B) * math.sin(B) * B * math.e ** (1j * (B * math.cos(A)))
Seu resultado para A = 106:

Função fococcia
def func_3(A, B): return math.cos((A + 1) * B) * math.e ** (1j * (B * math.cos(A)))
vis(246, func_3, step=0.1, c=color_2)

vis(246, func_3, step=0.1, c=color_2)

Função sem título
color_3 = lambda x, y: (0.5, 0.5, sigm(x ** 2 + y ** 2)) vis(162, func_4, step=0.1, c=color_3)

vis(179, func_4, step=0.1, c=color_3)

Fórmula de beleza
def func_5(A, B): return math.cos((A + 1) * B) ** 1.5 * math.e ** (1j * (B * math.cos(A)))
color_4 = lambda x, y: (sigm(x ** 2 + y ** 2) / 2, 0.5, 1 - sigm(x ** 2 + y ** 2)) vis(345, func_5, step=0.1, c=color_4)

vis(350, func_5, step=0.1, c=color_4)

Por enquanto é tudo.
Código inteiro import numpy as np import random import matplotlib.pyplot as plt import math def vis(A, f, step=1.0, c=None): x = [] y = [] for B in np.arange(0, A, step): v = f(A, B) x.append(v.real) y.append(v.imag) plt.figure(figsize=[7, 7]) mxabs = max([i[0] ** 2 + i[1] ** 2 for i in zip(x, y)]) ** 0.5 x = np.array(x) / mxabs y = np.array(y) / mxabs if c is None: plt.scatter(x, y) else: plt.scatter(x, y, color=[c(x[i], y[i]) for i in range(len(x))]) plt.show() def func_1(A, B): return math.sin(B) * B * math.e ** (1j * (B * math.cos(A))) def func_2(A, B): return math.cos(B) * math.sin(B) * B * math.e ** (1j * (B * math.cos(A))) def func_3(A, B): return math.cos((A + 1) * B) * math.e ** (1j * (B * math.cos(A))) def func_4(A, B): return math.sin(A + B) * B * math.e ** (1j * B * math.sin(A)) def func_5(A, B): return math.cos((A + 1) * B) ** 1.5 * math.e ** (1j * (B * math.cos(A))) def sigm(x): return (1 / (1 + 1.2 ** (-x*50)) - 0.5) * 2 color_1 = lambda x, y: (0.2, sigm(x ** 2 + y ** 2) / 1.4, 1 - sigm(x ** 2 + y ** 2)) color_2 = lambda x, y: (sigm(x ** 2 + y ** 2), 0.5, 0.5) color_3 = lambda x, y: (0.5, 0.5, sigm(x ** 2 + y ** 2)) color_4 = lambda x, y: (sigm(x ** 2 + y ** 2) / 2, 0.5, 1 - sigm(x ** 2 + y ** 2)) colors = [color_1, color_2, color_3, color_4] funcs = [func_1, func_2, func_3, func_4, func_5] while True: col = random.choice(colors) func = random.choice(funcs) vis(random.random() * 200 + 100, func, step=0.1, c=col) if input() == "exit": break