Menggambar hati di Python

Gambar hati (heart) sering digunakan orang sebagai simbol untuk mengekspresikan perasaan cinta. Betulkah demikian? Anggap saja betul. Entah itu anak-anak, remaja, atau orang dewasa pasti tau gambar hati. Para remaja yang sedang jatuh cinta sama lawan jenisnya sering saya jumpai senang menggambar hati (heart). Entah apa hubungan antara gambar hati dengan cinta. Love, begitulah kata para remaja sekarang, masa indah bagi mereka.

Nah, mau tau cara menggambar hati dengan persamaan matematika? Berikut ini beberapa gambar hati yang saya buat dengan menggunakan bahasa pemrograman Python. Untuk membuat plot terhadap persamaan matematika digunakan matplotlib, yaitu sebuah library khusus python untuk membuat plot 2D dari suatu array data. Adapun untuk pengolahan dan komputasi array data atau objek Python mempunyai library khusus, yaitu NumPy. Jadi kedua library tersebut harus sudah terintegrasi dengan editor python yang anda gunakan.

import matplotlib.pylab as plt
import numpy as np
x = np.linspace(-np.pi, np.pi)
plt.polar(x, 1+np.sin(x), linewidth=3.0)
plt.axis([0, 2, 0, 2])
plt.text(1.0,-1.0, r'$r=1+\sin \theta$', fontsize=20)
plt.show()

Atau :


import matplotlib.pylab as plt
import numpy as np
x = np.linspace(-np.pi, np.pi)
plt.polar(x, 1-np.sin(x), linewidth=3.0)
plt.axis([0, 2, 0, 2])
plt.text(2.0,1.0, r'$r=1-\sin\theta$', fontsize=20)
plt.show()

Dan inilah gambar yang ketiga,

import matplotlib.pylab as plt
import numpy as np
x = np.linspace(-2,2,1000)
y1 = np.sqrt(1-(abs(x)-1)**2)
y2 = -3*np.sqrt(1-(abs(x)/2)**0.5)
plt.fill_between(x, y1, color='pink')
plt.fill_between(x, y2, color='pink')
plt.xlim([-2.5, 2.5])
plt.ylim([-3.5, 1.5])
plt.text(0, -0.4, 'Heart For You', fontsize=20, fontweight='bold',
           color='blue', horizontalalignment='center')
plt.text(0, -1.0, r'$y_1=\sqrt{1-(|x|-1)^2}$', fontsize=16,
           horizontalalignment='center')
plt.text(0, -1.5, r'$y_2=-3\sqrt{1-\left(\frac{|x|}{2}\right)^{\frac{1}
           {2}}}$', fontsize=16, horizontalalignment='center')
plt.show()

Persamaan-persamaan matematika untuk gambar hati diantaranya saya temukan di halaman ini.

Selamat bersenang-senang! 🙂

Boy’s Surfaces

Boy’s surface is a nonorientable surface found by Werner Boy in 1901. Boy’s surface is an immersion of the real projective plane in 3-dimensional without infinities and singularities, but it meets itself in a triple point (self-intersect). The images below are generated using 3D-XplorMath, and with the “optimal” Bryant-Kusner parametrization when a= 0.5, -1.45 < u < 0, and 0 < v < 2\pi :

Boy's Surface (Bryant-Kusner)

Other viewpoints :

Boy's Surface (Bryant-Kusner) other viewpoints

Projective Plane

There are many ways to make a model of the Boy’s surface using the projective plane, one of them is to take a disc, and join together opposite points on the edge with self intersection (note : In fact, this can not be done in three dimensions without self intersections); so the disc must pass through itself somewhere. The Boy’s surface can be obtained by sewing a corresponding band (Möbius band) round the edge of a disc.

The \mathbb{R}^{3} Parametrization of Boy’s surface

Rob Kusner and Robert Bryant discovered the beautiful parametrization of the Boy’s surface on a given complex number z, where \left | z \right |\leq 1, so that giving the Cartesian coordinates \left ( X,Y,Z \right ) of a point on the surface.

In 1986 ApĂ©ry gave  the analytic equations for the general method of nonorientable surfaces. Following this standard form, \mathbb{R}^{3} parametrization of the Boy’s surface can also be written as a smooth deformation given by the equations :

x\left ( u,v \right )= \frac {\sqrt{2}\cos\left ( 2u \right ) \cos^{2}\left ( v \right )+\cos \left ( u \right )\sin\left ( 2v \right ) }{D},

y\left ( u,v \right )= \frac {\sqrt{2}\sin\left ( 2u \right ) \cos^{2}\left ( v \right )-\sin \left ( u \right )\sin\left ( 2v \right ) }{D},

z\left ( u,v \right )= \frac {3 \cos^{2}\left ( v \right )}{D}.

where

D= 2-a\sqrt{2}\sin\left ( 3u \right )\sin\left ( 2v \right ),

a varies from 0 to 1.

Here are some links related to Boy’s surface :

Ekspresi Rekursif Algoritma BPNN

Di top pencarian saya temukan kata kunci tentang ekspresi rekursif yang secara eksplisit dinyatakan oleh persamaan (10) pada posting saya sebelumnya tentang algoritma BPNN (backpropagation neural networks). Algoritama tersebut, seperti yang telah saya tulis, menggunakan metode gradient descent, namun untuk penurunan rumusnya dalam konteks struktur algoritma pembelajaran jaringan backpropagation, perlu pemahaman sedikit lebih dalam tentang persamaan diferensial parsial (PDE) termasuk pula aturan rantai (chain rule) di dalamnya. Metode ini bertujuan untuk meminimalkan error jaringan dengan cara memperbarui bobot w di setiap langkah iterasi. Untuk itu diperlukan suatu ekspresi atau persamaan yang mengaitkan perubahan error E di setiap layer, dimana nantinya didapat E_{n+1}<E_{n}, seperti tampak pada gambar berikut :

Maka diperlukan rumus untuk ekspresi rekursif antara \partial E/\partial x_{k}^{n}, bobot w, fungsi transfer non-linier dari jumlah input di setiap layer (s), dan \partial E/\partial x_{k}^{n+1}, dimana simbol k di sini menandai neuron pada layer ke-n atau ke-(n+1). Untuk mencari hubungan rekursif tersebut digunakan aturan rantai (chain rule) yang langkah-langkahnya adalah sebagai berikut.

Pertama, kita gali turunan parsial error yang mengacu kepada output neuron pada persamaan (9) di posting sebelumnya, yang dapat ditulis menjadi,

\frac{\partial E}{\partial x_{m}^{n}}= \sum_{j=1}^{L}\frac{\partial E}{\partial s_{j}^{n+1}}\frac{\partial s_{j}^{n+1}}{\partial x_{m}^{n}}, …. (1)

dan karena

s_{j}^{n+1}= \sum_{i=1}^{N} w_{ij}^{n+1}x_{i}^{n} ….(2)

maka diperoleh

\frac{\partial s_{j}^{n+1}}{\partial x_{m}^{n}}= w_{mj}^{n+1}. ….(3)

Dengan mensubstitusikan persamaan (3) ke persamaan (1) diperoleh :

\frac{\partial E}{\partial x_{m}^{n}}= \sum_{j=1}^{L}\frac{\partial E}{\partial s_{j}^{n+1}}w_{mj}^{n+1} ….(4)

Karena x_{j}^{n+1}=f\left ( s_{j}^{n+1} \right ), maka

\frac{\partial E}{\partial s_{j}^{n+1}}= f'\left ( s_{j}^{n+1} \right ) \frac{\partial E}{\partial x_{j}^{n+1}}….(5)

Dan akhirnya, dengan mensubstitusikan persamaan (5) ke dalam persamaan (4) diperoleh hubungan rekursif tersebut, yaitu :

\frac{\partial E}{\partial x_{m}^{n}}= \sum_{j} w_{mj}^{n+1} f'\left ( s_{j}^{n+1} \right ) \frac{\partial E}{\partial x_{j}^{n+1}}….(6)

Persamaan (6) ini menunjukan apa yang sedang kita bicarakan ini, yaitu bahwa \partial E / \partial x_{m}^{n} bisa dinyatakan secara rekursif dengan melibatkan derivatif error terhadap output neuron pada layer berikutnya.