Jouer avec des nombres complexes

Salut

Un autre essai. Jouons cette fois avec des nombres complexes, avec des formules et leur visualisation.



Idée


Un nombre complexe est une certaine extension d'un nombre réel, en fait un vecteur pour lequel un ensemble entier d'axiomes est défini. Tout nombre complexe (et donc réel) peut être écrit comme z=a+bioù a est la partie réelle, b est la partie imaginaire, i est la racine de l'équation x2=1. De nombreuses opérations sont définies pour lui, qui sont définies pour un nombre réel, par exemple, z1+z2=a1+a2+(b1+b2)i. Fait intéressant, si vous effectuez diverses opérations avec eux, augmentez le pouvoir, multipliez, etc., puis prenez Re(z)(partie réelle) pour l'axe Ox, et Im(z)(partie imaginaire) pour l'axe Oy, vous pouvez obtenir des images amusantes.

Au fait, j'ai moi-même trouvé toutes les formules suivantes.

Fonction de visualisation


Routine. La fonction, qui selon cette fonction itérative tire tout sur le terrain:

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() 

Toutes nos fonctions dépendent de deux paramètres A et B. De plus, nous itérons sur B à l'intérieur de vis (), et A est le paramètre global de la fonction.

La fonction Curl


f(A,B)=Bsin(B)eiBcos(A)



Sa déclaration en python:

 def func_1(A, B): return math.sin(B) * B * math.e ** (1j * (B * math.cos(A))) 

Et courir

 A = 121.5 vis(A, func_1, step=0.1) 

Et le résultat pour A = 121,5:



Et pour A = 221,5:



Notez que ces nombres ne découlent pas du calcul d'une intégrale définie sur une variété lisse et d'autres mots intelligents qui n'ont aucun sens dans ce contexte. Ce sont vraiment des nombres aléatoires, et il y a toujours exactement une infinité de différents A, à la suite de quoi la beauté est obtenue.

Besoin de peindre


Nous déclarons une fonction de couleur (une telle fonction qui renvoie un tuple de trois nombres en coordonnées):

 def sigm(x): #         0  1 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) 

Choisissez un paramètre aléatoire A, qu'il soit 149:

 vis(149, func_1, step=0.1, c=color_1) 



Fonction oies


Les oies sont décrites comme suit:

f(A,B)=cos(B)sin(B)BeiBcos(A)


Déclaration Python:

 def func_2(A, B): return math.cos(B) * math.sin(B) * B * math.e ** (1j * (B * math.cos(A))) 

Son résultat pour A = 106:



Fonction focaccia


f(A,B)=cos(B(A+1))eiBcos(A)



 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) 



Fonction sans titre


f(A,B)=Bsin(A+B)eiBsin(A)


 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) 



Formule beauté


f(A,B)=cos(B(A+1)) frac32eiBcos(A)



 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) 



C'est tout pour l'instant.

Code entier
 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 


Plus de captures d'écran


















Source: https://habr.com/ru/post/fr468781/


All Articles