Hai
Esai lain. Kali ini mari kita bermain dengan bilangan kompleks, dengan rumus dan visualisasi mereka.

Ide
Bilangan kompleks adalah ekstensi tertentu dari bilangan real, pada kenyataannya suatu vektor yang mendefinisikan seluruh rangkaian aksioma. Setiap bilangan kompleks (dan karenanya nyata) dapat ditulis sebagai
di mana a adalah bagian nyata, b adalah bagian imajiner, i adalah akar dari persamaan
. Banyak operasi didefinisikan untuk itu, yang didefinisikan untuk bilangan real, misalnya,
. Menariknya, jika Anda melakukan berbagai operasi dengan mereka, naikkan ke daya, berkembang biak, dll., Lalu ambil
(bagian nyata) untuk sumbu Ox, dan
(bagian imajiner) untuk poros Oy, Anda bisa mendapatkan gambar lucu.
Ngomong-ngomong, saya sendiri datang dengan semua formula berikut.
Fungsi visualisasi
Rutin. Fungsi, yang menurut fungsi berulang ini menarik semua yang ada di lapangan:
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()
Semua fungsi kita bergantung pada dua parameter A dan B. Selain itu, kita beralih ke B di dalam vis (), dan A adalah parameter global dari fungsi.
Fungsi Keriting
Pernyataannya dalam python:
def func_1(A, B): return math.sin(B) * B * math.e ** (1j * (B * math.cos(A)))
Dan lari
A = 121.5 vis(A, func_1, step=0.1)
Dan hasil untuk A = 121.5:

Dan untuk A = 221.5:

Perhatikan bahwa angka-angka ini tidak mengikuti dari perhitungan integral yang pasti pada manifold halus dan kata-kata pintar lainnya yang tidak berarti dalam konteks ini. Ini adalah angka yang benar-benar acak, dan masih ada ketidak terhinggaan dari A yang berbeda, sebagai hasil dari keindahan yang diperoleh.
Perlu melukis
Kami mendeklarasikan fungsi warna (fungsi yang mengembalikan tupel tiga angka dalam koordinat):
def sigm(x):
Pilih parameter A acak, biarlah 149:
vis(149, func_1, step=0.1, c=color_1)

Fungsi Angsa
Angsa diuraikan sebagai berikut:
Deklarasi Python:
def func_2(A, B): return math.cos(B) * math.sin(B) * B * math.e ** (1j * (B * math.cos(A)))
Hasilnya untuk A = 106:

Fungsi focaccia
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)

Fungsi Tanpa Judul
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)

Formula kecantikan
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)

Itu saja untuk saat ini.
Seluruh kode 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
Tangkapan layar lebih banyak