M. Shoufie Ukhtary's personal webpage.
Selain digunakan untuk perhitungan numerik, Phyton dapat digunakan juga untuk perhitungan simbolik (analytical calculation). Perhitungan simbolik Phyton dapat dilakukan dengan menggunakan library SymPy. Library ini memiliki fitur seperti program Mathematica, tetapi dapat digunakan tanpa biaya. SymPy sangat berguna saat kita memerlukan ekspresi analitik dari suatu perhitungan, seperti turunan dan integral dari suatu fungsi atau menyelesaikan suatu persamaan differensial.
Untuk memulai menggunakan SymPy, kita harus memanggil library SymPy. Di tutorial ini, saya menggunakan Jupyter notebook, supaya hasil dari perhitungan SymPy bisa langsung terlihat.
import sympy
sympy.init_session()
x, y, z = symbols("x y z ")
x + z # semisal kita ingin menghitung x + z
Baris 1 dan 2 adalah cara memanggil library SymPy, sedangkan baris 3 adalah perintah untuk mendefinisikan variabel dalam perhitungan. Dalam contoh ini, kita menggunakan variable x,y dan z. Semisal kita ingin menghitung x+z, maka kita tinggal mengetik seperti baris 5. Berikut, beberapa contoh expresi matematika yang sering dipakai dalam perhitungan.
exp(-I*x), cos(x), atan(x), besselj(0,x), sqrt(pi)
Bila kita evaluasi, maka akan memberikan output sebagai berikut.
di mana I adalah bilangan imajiner. Semisal kita ingin melakukan expansi aljabar sebagai berikut,
input pada SymPy adalah,
expand(x*(z+y)**2)
dengan output sebagai berikut,
Sebaliknya, bila kita ingin menyederhanakan suatu persamaan, semisal kita ingin menyederhanakan persamaan (2), maka ada dua jenis input pada SymPy,
simplify(x*y**2+2*x*y*z + x*z*z)
factor(x*y**2+2*x*y*z + x*z*z)
Baris 1 akan memberi output sebagai berikut,
Sedangkan baris 2 akan memberi output,
Selanjutnya, kita akan mencoba bagaimana cara kita melakukan perhitungan simbolik yang lebih kompleks.
Semisal kita ingin menghitung limit dari fungsi berikut,
Kita tahu bahwa jawaban dari persamaan (5}) adalah 1. Untuk menghitung persamaan (5), kita menuliskan input SymPy sebagai berikut,
limit(sin(x)/x,x,0)
yang memberi output 1. Secara umum, perintah limit terdiri atas tiga argumen. Argumen pertama adalah fungsi yang akan dihitung limitnya, argumen kedua adalah variable dari fungsi tersebut, sedangkan argumen ketiga adalah batas dari limit tersebut. Sebagai contoh lain, semisal kita ingin menghitung limit dari fungsi berikut,
Input pada SymPy adalah sebagai berikut,
limit((3+4*x)/(5+6*x),x,oo)
dengan output 2/3. oo adalah input untuk ∞.
Semisal kita ingin menghitung turunan fungsi sebagai berikut
Maka input pada SymPy adalah sebagai berikut,
f=5*x**2-cos(3*x)+6*x*y*z
diff(f,x,1)
di mana kita mendefinisikan fungsi tersebut sebagai f. Perintah diff memiliki tiga argumen. Argumen pertama adalah fungsi yang akan diturunkan, argumen kedua adalah variabel fungsi yang diturunkan, dan argumen ketiga adalah orde dari turunan. Dalam contoh ini kita memilih orde 1, karena kita menghitung turunan pertama. Output dari input SymPy ini adalah,
Sebagai contoh lain, semisal kita ingin menghitung turunan dari fungsi Bessel berikut,
y adalah orde dari fungsi Bessel. Maka input pada SymPy adalah sebagai berikut,
f=besselj(y,x)
diff(f,x,2)
dengan output sebagai berikut,
Mari kita coba integralkan fungsi pada persamaan (8) sebagai berikut,
Untuk menghitung intgral tanpa batas tersebut menggunakan SymPy, input pada SymPy adalah sebagai berikut,
f=10*x + 6*y*z + 3 * sin(3*x)
integrate(f,x)
dengan output sebagai berikut,
Argumen pertama dari integrate adalah fungsi yang akan diintegralkan, sedangkan argumen kedua adalah variable integral. Bagaimana dengan integral yang memiliki batas seperti di bawah ini?
Untuk menyelesaikan integral tersebut, input pada SymPy adalah sebagai berikut,
f=10*x + 6*y*z + 3 * sin(3*x)
integrate(f,(x,a,b))
Contoh selanjutnya adalah intergral rangkap dua seperti di bawah ini,
Input pada SymPy adalah sebagai berikut.
f=10*x + 6*y*z + 3 * sin(3*x)
integrate(f,(x,a,b),(y,d,c))
Contoh terakhir adalah integral berikut yang merupakan definisi fungsi Gamma (Γ(y)),
Maka, input pada SymPy adalah,
f=x**(y-1)*exp(-x)
integrate(f,(x,0,oo))
yang menghasilkan output sebagai berikut,
Semisal kita ingin mengkespansi suatu fungsi dalam bentuk deret. Ekspansi ini dikenal dengan nama ekspansi Taylor. Sebagai contoh, semisal kita ingin mengekspansi fungsi berikut,
dekat titik x = a, maka input pada SymPy adalah sebagai berikut,
f=sin(x)
series(f,x,a,3)
di mana kita melakukan ekspansi sampai tiga deret. Output dari perhitungan ini adalah,
di mana O menyatakan orde error dari perhitungan. Argumen pertama dari series adalah fungsi yang ingin dideretkan, argumen kedua adalah variabel dari deret, argumen ketiga adalah titik evaluasi deret dan argumen keempat adalah jumlah orde deret yang diinginkan.
Contoh lainnya adalah ekspansi dari fungsi Bessel berikut di sekitar x = 0,
Maka, input pada SymPy adalah sebagai berikut,
f=besselj(0,x)/x
series(f,x,0,3)
dengan output sebagai berikut,
Akar dari suatu fungsi f(x) didefinisikan sebagai berikut,
di mana x0 adalah akar dari fungsi f(x). Semisal kita ingin mencari akar dari fungsi kuadratik berikut
Maka, input pada SymPy adalah sebagai berikut,
f=a*x**2+b*x+c
solve(f,x)
yang memberikan output sebagai berikut,
Argumen pertama dari solve adalah fungsi yang akan dicari akarnya dan argumen kedua adalah variabel akar. Solve juga dapat digunakan untuk menyelesaikan suatu persamaan transendental seperti berikut,
Maka, solusi dari persamaan tersebut dapat dihitung menggunakan SymPy dengan input sebagai berikut,
f=cos(x)-sin(2x)
solve(f,x)
yang memberikan output untuk x sebagai berikut,
Matriks dapat ditulis pada SymPy sebagai berikut,
M = Matrix([[1,2],[3,4]])
M
yang memberikan output matriks M sebagai berikut,
Perkalian matriks dapat dilakukan seperti berikut,
M = Matrix([[1,2],[3,4]])
M*M
yang menghasilkan output berupa perkalian matriks M x M
Determinant dan inverse dari suatu matriks dapat dihitung dengan input sebagai berikut,
M = Matrix([[1,2],[3,4]])
M.det()
M.inv()
Baris kedua akan memberikan determinant dari matriks M, sedangkan baris ketiga memberikan inverse dari matriks M. Eigen value dan eigen vektor dari matriks M dapat dihitung dengan input sebagai berikut,
M = Matrix([[1,2],[3,4]])
M.eigenvects()
yang memberikan output sebagai berikut,
Ada dua eigen value dan eigen vektor dari matriks M. Kolom pertama dari masing-masing solusi adalah nilai eigenvalue, kolom kedua adalah multiplisitas dari eigen value dan kolom ketiga adalah eigen vektor. Terkhir, kita juga bisa mendiagonalisasi matriks M. Dalam kasus ini, kita menuliskan matriks M sebagai M=PDP-1, di mana $D$ adalah matriks yang sudah didiagonalisasi dan matriks P adalah matriks yang mendiagonalisasi matriks M. Matriks P dan D diperoleh melalui input SymPy sebagai berikut,
M = Matrix([[1,2],[3,4]])
M.diagonalize()
dengan output sebagai berikut,
Di mana matriks pada kolom pertama adalah matriks P dan matriks pada kolom kedua adalah matriks D. Dapat kita lihat bahwa matriks D hanya memiliki komponen diagonal yang tidak lain adalah eigen value dari matriks M.
Sejauh ini, kita hanya mengevaluasi ekspresi analitik dari suatu perhitungan. Semisal kita ingin mengevaluasi nilai numerik dari perhitungan berikut,
Untuk mengevaluasi nilai numerik dari fungsi f(x) pada x = 0.1, input pada SymPy adalah,
f=lambdify(x,diff(x**3*exp(-5*x),x,2))
f(0.1)
Pada baris pertama, kita menggunakan perintah lambdify agar dapat mengevaluasi secara numerik dari suatu fungsi. Argumen pertama pada lambdify adalah variabel fungsi yang akan dievaluasi, sedangkan argumen kedua adalah fungsi yang akan dievaluasi. Baris kedua akan memberikan nilai numerik dari fungsi untuk x = 0.1. Input SymPy di atas akan memberikan output berupa nilai numerik sebagai berikut,
Dengan menggunakan perintah lambdify, kita dapat membuat plot dari ekspresi analitik yang kita peroleh dari SymPy. Input untuk membuat plot adalah sebagai berikut,
import numpy as np
import matplotlib.pyplot as plt
f=lambdify(x,diff(x**3*exp(-5*x),x,2))
xx = np.linspace(0,5,500)
yy = f(xx)
plt.plot( xx,yy)
plt.tick_params( labelsize = 18 )
plt.ylabel('f(x)',size = 18)
plt.xlabel('x',size = 18)
plt.show()
Output dari input di atas adalah berupa plot dari f(x).