I Wayan Sudiarta Metode Numerik + Kemudian, persamaan (15.16) ini dapat dibagi ke dua sisinya dengan faktor h/T sehingga diperoleh per samaan lebih sederhana yaitu i ∂Ψ(ξ,τ) 1 [ hT ] ∂2Ψ(ξ,τ) T ] ∂τ = −2 mL2 ∂ξ2 W(ξ)Ψ(ξ,τ) (15.18) Kita dapat menyederhanakan persamaan ini dengan menggunakan skala atau satuan sehingga faktor di da lam [...] bernilai 1, [ [ V0 h hT 1 (15.19) mL2 ] = [V dan 0 ] = 1 T (15.20) Dengan menggunakan persamaan (15.19) dan (15.20), kita mendapatkan persamaan Schrödinger tanpa dimensi yaitu i h ∂Ψ(ξ,τ) 1 ∂2Ψ(ξ,τ) ∂τ = − + W(ξ)Ψ(ξ,τ) (15.21) 2 ∂ξ2 Persamaan (15.21) merupakan persamaan tanpa di mensi karena semua variabelnya tidak memiliki satu an atau dimensi. Persamaan ini terlihat dengan je las lebih sederhana dan lebih mudah digunakan untuk komputasi. Dengan kata lain dengan menggunakan satuan yang sesuai kita dapat menyederhanakan per samaan menjadi persamaan tanpa dimensi. Untuk ka sus persamaan Schrödinger kita mendapatkan satuan 333 382
√ hT/m = h/ waktu√mVT0 dan = h/V0 satuan panjang sehingga mendapatkan L = persamaan tanpa di mensi. Jika kita sudah tahu skala atau satuan yang digu nakan sudah sesuai, kita dapat mengubah persamaan menjadi persamaan tanpa dimensi dengan mengganti parameter-parameternya. Sebagai contoh, persamaan Schrödinger untuk elektron, kita dapat menggunakan satuan atomic sehingga parameter h = 1 dan massa elektron me = 1. Setelah substitusi parameter ini, ki ta mendapatkan persamaan tanpa dimensi yang sama yaitu i ∂Ψ(x, ∂t t) = − 1 ∂2Ψ(x, t) 2 ∂x2 + V (x)Ψ(x, t) (15.22) 15.2 Persamaan Difusi Pada bagian ini kita menyelesaikan persamaan difu si dengan metode numerik finite difference (FD) atau metode beda hingga. Secara garis besar, metode FD merepresentasikan solusi berupa nilai-nilai diskrit pa da grid dengan spasi seragam dan menggunakan tu runan numerik untuk pendekatan persamaan diferen sial. Dari metode FD dapat dihasilkan suatu persa maan numerik eksplisit atau juga implisit bergantung skema penggunaan gridnya. Pada buku ini, metode FD dengan persamaan numerik eksplisit yang diba has karena kemudahan dalam perhitungan numerik. 334 382
I Wayan Sudiarta Metode Numerik Untuk metode FD dengan persamaan implisit seper ti metode Crank-Nicolson dapat dibaca di buku-buku metode numerik. Persamaan difusi untuk perambatan panas pada ka wat atau penyebaran gas di dalam pipa adalah ∂U(x, t) ∂t = D∂2U(x, t) ∂x2 (15.23) dengan U dapat berupa suhu atau konsentrasi gas. Untuk menerapkan metode FD, kita membuat grid pada ruang-waktu dengan spasi ∆x dan ∆t seperti di tunjukkan pada Gambar 15.1. Setiap titik pada grid diberi label dengan indeks i untuk posisi x dan indeks n untuk waktu. Jadi posisi grid adalah x = i∆x dan waktu t = n∆t. Untuk mempermudah dalam pemrograman kita menggunakan notasi yang lebih singkat yaitu Uni ≡ U(i∆x, n∆t). Kita menggunakan indeks atas (super script) untuk waktu dan indeks bawah (subscript) un tuk ruang. Setelah posisi titik-titik solusi numerik pada grid di tentukan, kita selanjutnya mengunakan pendekatan numerik turunan terhadap waktu dan ruang yang di sesuaikan pada grid untuk mengubah persamaan dife rensial menjadi persamaan numerik eksplisit. Perhatikan grid untuk U pada posisi (x, t) atau in deks (i dan n), pendekatan numerik turunan pertama 335382
Ax At n +1 n n – 1 i - 1 i +1 Gambar 15.1 : Grid yang digunakan untuk persamaan difusi . terhadap waktu dengan metode kedepan/maju ( forwa rd) pada posisi ( x, t ) adalah auu Ot U ( x, t + At) – U( x, t ) At ( 2, t ) Up +1 – UM - ( 15.24 ) Dengan prosedur yang sama untuk pendekatan tu runan kedua pada ruang X, ſa201 ac2 (at) U( x + Ax, t ) – 20( x , t ) + U( x – Ax, t ) ( Ax) 2 ( 15.25) 01 – 2U + U - 1 ( 15.26 ) (Ar) 336 | 382
I Wayan Sudiarta Metode Numerik Substitusi persamaan (15.24) dan (15.26) pada per samaan difusi (15.5), diperoleh Un+1i − Uni ∆t = DUni+1 − 2Uni + Uni−1 (∆x)2 (15.27) Kemudian kita kalikan kedua sisi persamaan (15.27) dengan ∆t, dan selanjutnya memindahkan variabel Uin ke sisi kanan, kita mendapatkan persamaan numerik eksplisit yaitu Un+1i = Un D∆t i + [ (∆x)2 ] (Ui+1n − 2Uni + Uni−1) (15.28) = Proses untuk mendapatkan solusi persamaan difusi mirip dengan metode Euler pada persamaan diferen sial biasa. Kita mulai dengan nilai-nilai U(x, t) awal pada indeks n 0, atau Uin. Nilai-nilai awal ini su dah diketahui sebagai syarat awal permasalahan. Ke mudian nilai U(x, t) pada interval waktu berikutnya, Un=1i dihitung dengan menggunakan persamaan nu merik (15.28). Proses ini atau iterasi ini diteruskan sampai waktu yang diinginkan sudah diperoleh. Supaya iterasi numerik stabil, ∆t tidak bisa bernilai sembarang atau besar, harus memenuhi syarat stabili tas (Mathews (1992) dan Chapra dan Canale (2006)) berikut ini ∆t < 1 (∆x)2 2D (15.29) 337 382
Penggunaan Python [ 1 ] : %matplotlib inline [ 2 ] : import numpy as np import matplotlib.pyplot as plt from matplotlib import cm from mpl_toolkits.mplot3d import Axes3D [ 3] : # Jumlah grid N 50 = # Parameter dx 0.02 dt = dx * dx/ 4 alpha dt / ( dx* dx ) = # titik tengah x0 = N * dx/ 2 # Membuat array zeros sebanyak (N + 1 ) untuk grid UO = np.zeros ( [ N+ 1 ] ) U = np.zeros ( [ N + 1 ] ) Unew = np.zeros ( [N+ 1 ] ) + # array nilai α X = np.arange ( N + 1 ) * dx - x0 338 | 382
I Wayan Sudiarta Metode Numerik # syarat awal UO [ 25] = 10 [4] : # Iterasi persaman difusi # jumlah iterasi nt = 20 Ut [ ] s [] # Inisialisasi syarat awal dan batas for i in range ( 0 , N+ 1 ) : U [ i ] = UO [ i ] for n in range ( 1 , nt ) : # waktu t = n * dt # Compute update for i in range ( 1 , N ) : Unew [ i ] U [ i ] + alpha* ( U [ i + 1 ] -u 2 * U [ i ] + U [ i - 1 ] ) # Save for next iteration for i in range ( 0 , N+ 1 ) : U [ i ] Unew [ i ] - 339 382
== # Save for plotting if n%5 0: Ut.append(list(U)) s.append( t = + str(t)) [5]: # Visualisasi hasil setelan n iterai # Tambahkan data awal U0 Ut.insert(0,U0) s.insert(0, t = 0 ) # Plot for k in range(len(Ut)): plt.plot(x,Ut[k]) plt.title( Simulasi Difusi Gas ) plt.xlabel( x ) plt.ylabel( U(x,t) ) plt.xlim([-0.2,0.2]) plt.legend(s) plt.show() 340 382
I Wayan Sudiarta Metode Numerik [6]: Vnew = np.zeros([N+1]) 15.3 Persamaan Laplace Pada bagian ini dibahas persamaan Laplace dimensi dua yang berbentuk: ∂2U ∂U ∂x2 + ∂y2 = 0 (15.30) Untuk mendapatkan solusi kita merepresentasikan dengan nilai-nilai diskrit pada titik-titik pada grid 2D (lihat Gambar 15.2). Seperti sebelumnya, kita mengguna notasi Ui,j = U(i∆x, j∆y). Perhatikan titik pada posisi (x, y) atau 341 382
Ax Ay j +1 j j - 1 į – 1 i ¿ +1 Gambar 15.2 : Grid yang digunakan untuk persamaan Laplace. indeks ( i , j ) pada Gambar 15.2 . Pendekatan nume rik untuk turunan numerik orde dua dengan metode numerik tengah ke arah x dan y posisi ( x , y ) yaitu [ 2201 Əx2 ( 2, y) U( x + Ax, y) – 20( x, y) + U( x – Ax, y) (Ar)2 Ui+ 1,3 – 20i,j + Ui- 1,j ( 15.31 ) ( Ax) 2 dan Les a2U ду a U ( x , y + Ay) – 20( x, y) + U (x , y - Ay) ay? ) ( x, y ) ( Ay) 2 Ui, j + 1 – 20i, j + Ui,j -1 ( 15.32 ) ( Ay) 2 = Substitusi persamaan ( 15.31) dan ( 15.32) pada per 342 382
I Wayan Sudiarta Metode Numerik + samaan Laplace (15.3), dihasilkan U i+1,j − 2Ui,j + U i−1,j Ui,j+1 − 2Ui,j + Ui,j−1 (∆x)2 = 0 (∆y)2 (15.33) Kita dapat menyederhanakan dengan menggunakan ∆x = ∆y menjadi Ui+1,j + Ui−1,j + Ui,j+1 + Ui,j−1 − 4Ui,j = 0 (15.34) atau 4Ui,j − Ui+1,j − Ui−1,j − Ui,j+1 − Ui,j−1 = 0 (15.35) Persamaan (15.35) merupakan persamaan linier de ngan variabel-variabel {Ui,j } yang belum diketahui. Untuk jumlah variabel yang sedikit solusi persama an linier dapat diperoleh dengan penerapan eliminasi Gauss atau menyelesaikan persamaan matriks. Un tuk jumlah jumlah variabel yang besar, biasanya le bih efisien menggunakan metode iterasi Jacobi atau Gauss-Seidel. Persamaan linier (15.35) dapat diubah ke bentuk iterasi Jacobi yaitu 1 (k) 4 (Ui+1,j + Ui−1,j (k) + Ui,j+1 (k) + U i,j−1(k)) (15.36) Dengan menyediakan syarat batas permasalahan dan menggunakan nilai awal U = 0 (selain pada syarat batas), kita dapat melakukan iterasi dengan persama an (15.36) sampai nilai konvergen diperoleh. Iterasi yang konvergen dijamin dengan nilai faktor 1/4 pada persamaan (15.36). Ui,j(k+1) = 343 382
Penggunaan Python Untuk sebuah contoh perhitungan, kita menggunakan sebuah kasus dengan syarat batas sebagai berikut 1. V [0,j] = 100 untuk semua j 2. V [N,j]=0 untuk semua j 3. V [i,0] = 0 untuk semua i 4. V [i, N]=0 untuk semua i [1]: %matplotlib inline [2]: import numpy as np import matplotlib.pyplot as plt from matplotlib import cm from mpl_toolkits.mplot3d import Axes3D [3]: # Jumlah grid N = 50 # Membuat array zeros sebanyak ↩→(N+1)x(N+1) untuk grid v = np.zeros([N+1,N+1]) [4]: # Inisialisasi syarat batas for j in range(0,N+1): v[0,j] = 100 [5]: # Keadaan awal array dengan imshow 344 382
I Wayan Sudiarta Metode Numerik plt.imshow ( v.transpose ( ) , u Ginterpolation= ' nearest ' ) plt.gca ( ) . axes.get_xaxis ( ) . set_visible (false ) plt.gca () . axes.get_yaxis () . 4set_visible ( false ) plt.show ( ) 345 | 382
[ 6] : # Iterasi persaman Laplace for n in range (1000 ) : for i in range ( 1 , N ) : for j in range ( 1 , N) : v [ i , j ] ( v [ i - 1 , j ] + v [ i+ 1 , j ] u 4+ v [ i , j - 1 ] + v [ i , j + 1 ] ) / 4 = [ 7] : # Visualisasi aray hasil dengan imshow plt.imshow ( v.transpose ( ) , interpolation = 'nearest ' ) plt.axis ( ' off' ) plt.show (). 346 | 382
I Wayan Sudiarta Metode Numerik [8]: # Membuat posisi grid dengan meshgrid X,x =Yy==np.meshgrid(x, np.arange(N+1)*0.02 y, sparse=False, ↩→indexing= ij ) [9]: # Visualisasi dengan contourf plt.figure(figsize=(8,6)) plt.contourf(X,Y,v,10, cmap=cm.coolwarm) plt.xlabel( $x$ ) plt.ylabel( $y$ ) plt.colorbar() plt.show() 347 382
[ 10] : # Visualisasi dengan axes fig , ax = plt.subplots (figsize= (6,6 ) ) ax.set_aspect ( ' equal' ) cf = ax . contourf ( X , Y , V , 10 , cmap=cm . inferno ) fig . colorbar ( cf , ax= ax ) ax.set_xlabel ( ' $x$ ' ) ax.set_ylabel ( ' $y$ ' ) plt.show ( ) 100 10 -80 0.8 0.6 60 0.4 40 0.2 20 0.00.0 0.2 0.4 0.6 0.8 10 348 | 382
I Wayan Sudiarta Metode Numerik ах [ 11 ] : # Mengikuti contoh https://matplotlib.org/ 43.1.0 / gallery /mplot3d / surface3d.html fig plt.figure ( figsize= ( 8,6 ) ) fig.gca (projection = '30 ' ) # Plot the surface. surf = ax.plot_surface ( X , Y , V , cmap= cm . 4coolwarm , linewidth = 0 , antialiased = False ) fig.colorbar ( surf, shrink=0.5 , aspect=5 ) plt.show ( ) 100 80 80 60 60 40 40 20 20 0 10 0.8 0.6 0.0 0.2 0.4 0.4 0.6 0.2 0.8 10 0.0 349 | 382
15.4 Persamaan Gelombang Persamaan untuk perambatan gelombang skalar pada ruang dimensi satu adalah: ∂2U ∂t2 = c2 ∂U ∂x2 (15.37) dengan c adalah laju rambat gelombang di dalam me dium dan U dapat berupa simpangan untuk gelom bang pada tali atau pegas, atau berupa tekanan udara pada pipa dan sebagainya. Seperti sebelumnya, kita menggunakan pendekatan grid untuk menerapkan metode FD. Grid untuk persa maan gelombang diberikan pada Gambar 15.3. Seper ti pada metode FD untuk persamaan difusi, kita juga menggunakan notasi Uni ≡ U(i∆x, n∆t). Pendekatan numerik untuk turunan numerik orde dua dengan metode numerik tengah terhadap variabel x dan t pada titik (x, t) atau indeks (i, n) yaitu [ ∂2U ∂x2 ] (x,t) ≈ U(x + ∆x, y) − 2U(x, y) + U(x − ∆x, y) = (∆x)2 Ui+1 n − 2Uni + (∆x)2 Uni−1 (15.38) 350 382
I Wayan Sudiarta Metode Numerik Ax At n +1 n n – 1 i - 1 i +1 Gambar 15.3 : Grid yang digunakan untuk persamaan gelombang. 82U at2 ( x, t ) U( x , y + At) – 20 (x , t) + U( x, t – At) ( At) 2 U2 +1 – 20.5 + - 1 ( 15.39 ) ( At) 2 = Setelah substitusi persamaan ( 15.38) dan ( 15.39) pa da persamaan gelombang ( 15.37 ), dihasilkan persama an = c2 (un +1 – 2U ” + U1-1) (U:+1 – 20” + Up-1 ( At) 2 ( 4x) 2 ( 15.40 ) Setelah penyederhanaan dan pengaturan posisi variabel -variabel diperoleh persamaan numerik beri 351 | 382
kut ini . un + 1 = 20” – Un -1 + c- ( At) 2 ] (4x) – 20 ;" + UIT ( 15.41 ) Supaya iterasi stabil, At harus memenuhi syarat sta bilitas ( Mathews, 1992) yaitu Ax At < ( 15.42 ) С Penggunaan Python [ 1 ] : %matplotlib inline [ 2] : import numpy as np import matplotlib.pyplot as plt from matplotlib import cm from mpl_toolkits.mplot3d import Axes3D [ 3] : # Jumlah grid N 50 # Parameter C = 1 = dx 0.02 dt = dx/ ( 2 * c ) alpha ( c * dt /dx ) ** 2 x0 = N * dx/ 2 = 352 | 382
I Wayan Sudiarta Metode Numerik # Membuat array zeros sebanyak ( N + 1) Guntuk grid UO = np.zeros ( [ N+ 1 ] ) U1 np.zeros ( [N+ 1 ] ) Un = np.zeros ( [ N+ 1 ] ) Unm1 np.zeros ( [N+ 1 ] ) Unp1 np.zeros ( [N+ 1 ] ) = # array nilai a x = np.arange ( N+ 1 ) * dx -x0 Untuk inisialisasi kita menggunakan pulsa gelom bang ynag merambat ke +x berbentuk U( x , t ) = a exp ( -6( x – ct) ? ) ( 15.43 ) [4] : # syarat awal a 1 = b = 100 # fungsi gelombang pada waktu t = 0 UO = np . exp ( -b* ( x - 0 ) ** 2 ) # fungsi gelombang pada waktu t dt U1 = np.exp ( -b * ( x C * dt ) ** 2 ) [ 5] : plt.plot ( x , 10) plt.plot ( x , 01 ) 353 | 382
plt . show 10 0.8 0.6 u 0.4 0.2 0.0 -0.4 -0.2 0.0 0.2 0.4 [ 6 ] : # Iterasi persaman difusi # jumlah iterasi nt = 40. # waktu Unm1 = np . copy (UO ) Un = np.copy (U1) Ut = [ ] s [ ] 354 | 382
I Wayan Sudiarta Metode Numerik for n in range (2 ,nt+ 1) : t = n* dt # Compute update for i in range ( 1 , N ) : Unp1 [ i ] = 2 * Un [ i ] Unm1 [i ] +u Halpha* (Un [ i + 1] - 2 *Un [ i ] + Un [ i - 1 ] ) # Save for next iteration Unm1 = np . copy (Un ) Un = np.copy (Unp1) == # Save for plotting if n% 10 O : Ut.append (list (Un ) ) S.append ( ' t = + str ( t ) ) [7] : # Visualisasi hasil setelan n iterai # Tambahkan data awal UO Ut.insert ( 0,00 ) s.insert ( 0 , ' t = 0 ' ) # Plot for k in range (len (Ut ) ) : plt.plot ( x ,Ut [k ] ) plt.title ( ' Simulasi Gelombang Skalar ' ) plt.xlabel ( ' x ' ) 355 | 382
plt.ylabel( U(x,t) ) plt.legend(s) plt.show() 356 382
Bab 16 Persamaan Eigen "The purpose of (scientific) computing is insight, not numbers". – Richard Hamming 16.1 Matriks 2 × 2 Pada bab ini kita mempelajari metode untuk penye lesaian persamaan eigen. Apa itu persamaan eigen? Supaya lebih jelas, mari kita pertimbangkan sebuah matriks A yang berukuran 2 × 2, sebagai contoh ma triks berikut ini. A 12 21 1 3 = (16.1) dengan faktor 1/2 merupakan faktor skala. Matriks 2 × 2 ini dapat dioperasikan pada atau di kalikan secara matriks dengan sebuah vektor kolom 357 382
v = [x, y]T dan menghasilkan sebuah vektor baru v = [x ,y ]T = Av. = x 1 2 1 x (16.2) y 2 1 3 y Dengan kata lain bahwa matriks A merupakan tran sformasi yang memetakan sebuah titik (x, y) pada titik (x ,y ). Matriks A dapat dikatakan juga merupakan sebuah operator yang dapat dioperasikan pada sebuah vektor kolom. Selanjutnya kita perhatikan apa yang terjadi jika titik-titik pada koordinat Kartesius (x, y) dioperasikan oleh operator A, sebagai contoh persamaan (16.1). Se buah visualisasi perpindahan titik (x, y) ke titik (x ,y ) dengan representasi anak panah ditunjukkan pada Gambar 16.1. Memperhatikan perpindahan titik-titik tersebut terlihat ada sebuah pola. Perhatikan titik titik di sepanjang garis p atau q. Titik pada garis akan berpindah tetapi tetap pada garisnya. Karena garis p dan q melalui titik origin (0,0), maka persamaan ga risnya adalah t[a, b]T dengan vektor [a, b]T merupakan arah garis dan t adalah parameter skala. Ini berarti bahwa operasi A pada titik di garis hanya menghasil titik tersebut dikalikan dengan sebuah skala, dinota sikan dengan λ. Jadi titik-titik pada garis merupakan solusi sebuah persamaan, dinamakan persamaan eigen, 358 382
I Wayan Sudiarta Metode Numerik yaitu Av = λv (16.3) y p q O x Gambar 16.1: Perpindahan posisi divisualisasikan de ngan anak panah akibat transformasi dengan operator A persamaan (16.1). Solusi persamaan eigen (16.3) berupa nilai eigen λ dan vektor eigen v. Solusi persamaan eigen ini me rupakan karakteristik dari operator A. Pada kasus matriks 2×2, kita mendapatkan sumbu-sumbu utama (garis p dan q). Besarnya nilai eigen λ menentukan 359 382
besarnya efek atau kontribusi pada sumbu utama, se bagai faktor skala operasi A. Mengatur persamaan (16.3), dengan bantuan ma triks identitas I, diperoleh persamaan (A − λI)v = 0 (16.4) Supaya solusi persamaan eigen non-trivial atau ti dak nol, matriks A − λI haruslah singular. Atau de ngan kata lain determinan matriksnya haruslah nol. det(A − λI)=0 (16.5) Persamaan (16.5) merupakan persamaan karakteristik yang nonlinier dengan λ belum diketahui dan perlu didapatkan. Sebagai contoh matriks pada persamaan (16.1) me miliki persamaan karakteristik yaitu ∣ ∣ ∣∣ ∣ ∣ 1 − λ 1/2 3/21/2 − λ ∣ ∣ ∣ ∣ ∣ = 0 (16.6) atau = 0 atau setelah disederhanakan menjadi (1 − λ)(32 − λ)− 14 (16.7) 4λ2 − 10λ +5=0 (16.8) Dengan rumus akar persamaan kuadrat, solusinya ada lah λ1 = 5 − √ 5 λ2 = 5 + 5 4 (16.9) 4 √ 360 382
I Wayan Sudiarta Metode Numerik Vektor eigen dapat diperoleh dengan substitusi nilai eigen dan kemudian menyelesaikan persamaan eigen nya. Untuk persamaan eigen untuk kasus ini diperoleh vektor eigen berikut ini. v1 = −( √51− 1)/2 v2 = (√5 +1 1)/2 (16.10) 16.2 Metode Pangkat Metode iterasi yang mudah dikerjakan untuk menda patkan vektor eigen dengan nilai eigen terbesar adalah metode pangkat. Melanjutkan dengan contoh matriks A sebelumnya, kita memiliki dua nilai eigen yang ber beda dan λ1 < λ2. Umpama kita memulai dengan sebuah vektor se barang v yang dapat dibentuk dari kombinasi linier vektor-vektor eigen. v = c1v1 + c2v2 (16.11) Jika kita operasikan operator A pada vektor v menghasilkan Av = c1Av1 + c2Av2 = c1λ1v1 + c2λ2v2 (16.12) 361 382
Kemudian dilakukan kembali operasi dengan opera tor A sebanyak (n − 1) kali, dihasilkan Anv = c1λn 1 v1 + c2λn 2 v2 (16.13) Karena λ1 < λ2, maka λn1 << λn 2 . Jadi iterasi ini ak an menghasilkan vektor eigen dengan nilai eigen yang dominan (paling besar) atau Anv ≈ c2λn2v2 (16.14) Sebagai contoh kita operasikan operator A dengan vektor awal (v = [1,1]T) diperoleh iterasi yang di berikan pada Tabel 16.1. Kita dapat menyimpulkan bahwa vektor yang dihasilkan semakin besar sesuai dengan faktor λn2. Pada iterasi ke 30, kita membagi hasilnya dengan nilai komponen x, diperoleh vektor (1,1.618033989)T. Nilai ini sesuai dengan nilai eksak v2 (persamaan (16.10) yaitu (1,1.6180339887)T. 16.3 Penggunaan Python Referensi untuk kode Python di bawah ini yaitu 1. https://docs.sympy.org/latest/modules/ matrices/matrices.html 2. https://numpy.org/doc/stable/reference/ routines.linalg.html 362 382
I Wayan Sudiarta Metode Numerik Tabel 16.1: Hasil iterasi dengan operasi operator A. Hasil pada iterasi ke 30 dapat disederhanakan dengan membagi nilai x sehingga diperoleh vektor (1,1.618033989)T. n x y 0 1 1 1 1.5 2 2 2.5 3.75 3 4.375 6.875 4 7.8125 12.5 5 14.0625 22.65625 6 25.390625 41.015625 7 45.8984375 74.218750 8 83.0078125 134.2773438 9 150.1464844 242.9199219 10 271.6064453 439.4531250... ... .. . 30 38263266.33 61911265.45 [1]: from sympy.matrices import Matrix from sympy import init_printing init_printing() from numpy import linalg as la import numpy as np 363 382
[ 2] : # Menggunakan Sympy A = Matrix ( [ [ 1,1 / 2] , [ 1 / 2,3/2] ] ) A 1 0.5 0.5 1.5 [ 3] : al , a2 A.eigenvals ( ) # Nilai eigen 1 al 5 5 4 4 [4] : # Nilai eigen 2 a2 V5 5 4 . + 4 [ 5] : vec = A.eigenvects ( ) # vektor 1 v1 = vec [ 0] [ 2 ] [ 0] v1 -1.61803398874989 1.0 [ 6] : # vektor 2 v2 = vec [ 1 ] [ 2 ] [ 0] v2 364 | 382
I Wayan Sudiarta Metode Numerik 0.618033988749895 1.0 [ 7] : # Menggunakan Numpy m = np.array ( [ [ 2,1] , [ 1,3] ] ) / 2 print (m) [ [ 1 . 0.5] [ 0.5 1.5] ] [8] : # Hitung nilai eigen dan vektor eigen W , v = la.eig (m ) [ 9] : # Nilai eigen print ( w) [ 0.69098301 1.80901699] [ 10] : # vektor eigen 1 print ( v [ : , 0] ) [ -0.85065081 0.52573111] [ 11 ] : # vektor eigen 2 print ( v [ : , 1 ] ) [ -0.52573111 -0.85065081] 365 | 382
16.4 Penggunaan Python Untuk Solusi Persamaan Schrödinger 1D Persamaan Schrödinger 1D tidak bergantung waktu untuk sebuah partikel di dalam potensial V (x) pada daerah komputasi [0,L]: − h2 ∂2ψ(x) 2m ∂x2 + V (x)ψ(x) = Eψ(x) (16.15) dengan syarat batas ψ(0) = ψ(L)=0. Kita mengubah persamaan (16.15) dengan menga tur posisi parameter-parameternya menjadi, − ∂2ψ(x) 2mV (x)ψ(x) = E 2m ∂x2 h2 ψ(x) (16.16) Kemudian kita merepresentasikan solusi dengan nilai-nilai ψ pada titik-titik grid dengan spasi/selang ∆x. Jika kita bagi grid menjadi N bagian, sehingga ada (N + 1) titik yaitu x0 = 0,...,xN = 1 (Lihat Gambar 16.2). + h2 ∆x x0 x1 x2 x3 x4 ··· xN-1 xN Gambar 16.2: Grid untuk metode Finite Difference dengan spasi ∆x. Kita selanjutnya menggunakan pendekatan numerik turunan kedua, sebagai contoh pada posisi x = xi = 366 382
I Wayan Sudiarta Metode Numerik iAx yaitu 224 ( x ) a.x2 = Wi- 1 - 24 ; + Vi+ 1 ( Ax) 2 ( 16.17) X=Xi Setelah substitusi ke persamaan sebelumnya, Vi- 1 – 20; + Vi+1 2m 2m + -ViVi E Vi ( 16.18 ) (4x) ħ2 ħ2 Kemudian, kita sederhanakan lagi menjadi 2m – Wi- 1 + 24 ;– Wi+1 + (4x )22mViVi . = E (A.r ) -Vi ( 16.19) atau ħ2 ħ2 – Vi - 1 + ( 2+ V ?)yi – Vi+1 = E'vi ( 16.20) dengan V! = V;(Ax)22m dan E' = E (Ax)22 . Dengan menggunakan syarat batas Vo = Un = 0 , kita dapat dibentuk menjadi persamaan matriks beri kut ini. Hy = E'o ( 16.21 ) dengan -1 0 0 0 ( 24V -1 2 + % . -1 0 0 H = 0 - 1 2 + V 0 0 : : : : 0 0 0 -1 24VN - 1 ) ( 16.22 ) 367 | 382
ψ1 ψ2 ψ = ψ3 ... (16.23) ψN−1 Persamaan (16.21) merupakan sebuah persamaan eigen. Perhatikan bahwa matriks H berbentuk tridia gonal, terdiri dari tiga diagonal. Kita perlu mengingat bahwa setelah hasil yang kita peroleh E , kita perlu mengkonversinya ke energi eigen dengan E = h2 2(∆x)2 m . Untuk kasus partikel pada sebuah potensial harmo nik, V (x) berbentuk V = 12 kx2 = 12 mω2x2 dan energi eigennya adalah E En = (n + 1 2 )hω Referensi yang digunakan dalam pembuatan kode Phyton untuk penyelesaian persamaan eigen adalah 1. https://numpy.org/doc/1.18/reference/ generated/numpy.linalg.eig.html 2. https://numpy.org/doc/stable/reference/ generated/numpy.diag.html 3. https://docs.scipy.org/doc/scipy/ reference/generated/scipy.linalg.eig. html 368 382
I Wayan Sudiarta Metode Numerik Contoh cara penggunaan modul Numpy untuk membentuk matriks diagonal dan mendapatkan solusi persamaan eigen yaitu np.diag(array1d, k = 1 ) w, v = la.eig(array2d) Perlu dicatat bahwa w berisi nilai-nilai eigen dan v ber isi vektor-vektor eigen. [1]: %matplotlib inline from numpy import linalg as la import numpy as np import matplotlib.pyplot as plt [2]: # Buat matriks tridiagonal untuk pers. ↩→Schrodinger # jumlah grid N = 100 # spasi/selang \Delta x L = 10.0 dx = L/N # membentuk matriks H h1 = np.diag(2*np.ones(N-1), k = 0) h2 = np.diag(-1*np.ones(N-2), k = -1) h3 = np.diag(-1*np.ones(N-2), k = 1) 369 382
= # posisi 2 xo L/ 2 X = ( 1 + np.arange ( N - 1 ) ) * dx - x0 # potensial harmonik k = 1 V ( 1/2 ) **** 2 Vm = np . diag (V * ( 2 * dx** 2 ) ) # matriks h h1 + h2 + h3 + Vm [ 3] : plt.plot ( x , V) plt.show ( ) 12 10 8 6 4 2 0 -4-2 2 4 370 382
I Wayan Sudiarta Metode Numerik [4]: # Hitung nilai eigen w, v = la.eig(h) [5]: energi = w/(2*dx**2) energi [5]: array([207.41768566, 207.41768566, 204. ↩→11925982, 204.1192577 , 201.82968284, 201.82771388, 200. ↩→33477623, 200.17787369, 199.37911545, 198.64906895, 197. ↩→73618865, 196.70710118, 186.69866876, 188.40283445, 190. ↩→02019559, 191.54827286, 195.56791796, 192.9843764 , 184. ↩→91005413, 183.03927869, 181.08860062, 179.0602737 , 176. ↩→95656492, 172.53220506, 170.21624593, 167.83429833, 165. ↩→38881702, 162.88230367, 160.31730728, 157.69642395, 155. ↩→02229618, 0.4996873 , 3. ↩→49217088, 1.49843574, 146.70754062, 2.49593072, 371 382
و و و 4652226 143.84774137 , 149.52510196 , 4 . 487163 140.94855601 , 5.48096736 , 6.47390861 , 138 . 0128721 , 135.0436106 , 7.46730226 , 132.04372341 , 8 . 9.47719576 , 129.01619078 , 125.96401869 , 10 . 51974596 , 11.61388425 , 12.77914072 , 116.6900535 119 . 79789215, 113.56980134 , 110.44022854 , 15.36924218 , 16 . 80211591 , 18. 32654768 , 19.94061944 , 107.3044368 104 . 16553369 , 21.64205047 , 101.02662976 , 23.4284726 , 33 . 5531843 , 35.80025722 , 38.11583949 , 31.37701792 , 40 . 49749758 , 85.44080448 , 88.53315592 , 82.36701382 , 79 . 31483363, 29 .27412462 , 48.01397402 , 50.63476437 , 53 . 30882479 , 76. 28729346 , 58.80593963 , 61.62348089 , 91 . 64100117 , 56.03346188 , 73.28740003 , 64.48326905 , 97 . 89083556 , 42.94275772 , و 372 | 382
I Wayan Sudiarta Metode Numerik 27.24684824, 70.31813454, 194. 67. ↩→32546657, 152.29761168, ↩→38245007, 25.29752027, 14.02879226, 122.89023608, ↩→449103494.76125875, ]) 174.77976664, 45. [6]: # Nilai energi ground state gs = np.min(energi) # indeks pada array igs = np.argmin(energi) #cetak hasil print(gs, igs) 0.4996873044060518 31 [7]: gs_eksak = 1/2 print(gs_eksak) 0.5 [8]: error = gs -gs_eksak print(error) 373 382
-0.0003126955939481979 [9]: # Plot fungsi gelombang keadaan dasar psi = v[:,igs] # normalisasi norm = np.sqrt(np.sum(psi*psi)*dx) plt.plot(x, psi/norm, ob ) # plot eksak plt.plot(x, (1/np.pi**(1/4))*np.exp(-x**2/ ↩→2)) plt.xlabel( $x$ ) plt.ylabel( $\psi$ ) plt.legend([ FD , Eksak ]) plt.show() 374 382
I Wayan Sudiarta Metode Numerik [10]: # Urutkan energi dengan indeksnya energi2 indeks_sort = energi[indeks_sort] = np.argsort(energi) print(energi2) [ 0.4996873 1.49843574 2.49593072 3. ↩→49217088 4.487163 5.48096736 6.47390861 7.46730226 8. ↩→4652226 9.47719576 10.51974596 11.61388425 12.77914072 14. ↩→02879226 15.36924218 16.80211591 18.32654768 19.94061944 21. ↩→64205047 23.4284726 375 382
25.29752027 27.24684824 29.27412462 31 . 37701792 33.5531843 35.80025722 38.11583949 40.497497588 42 . 494275772 45.4491034 48.01397402 50.63476437 53.30882479 56 . c - 03346188 58.80593963 61.62348089 64.48326905 67.38245007 70 . c431813454 73.28740003 76.28729346 79.31483363 82.36701382 85 . -44080448 88.53315592 91.64100117 94.76125875 97.89083556 101 . 402662976 104.16553369 107.3044368 110.44022854 113.56980134 116 . cs6900535 119.79789215 122.89023608 125.96401869 129.01619078 132 . 404372341 135.0436106 138.0128721 140.94855601 143.84774137 146 . -70754062 149.52510196 152.29761168 155.02229618 157.69642395 160 . cy31730728 162.88230367 165.38881702 167.83429833 170.21624593 172 . 453220506 174.77976664 176.95656492 179.0602737 181.08860062 183 . 403927869 184.91005413 186.69866876 188.40283445 190.02019559 191 . 454827286 192.9843764 376 | 382
I Wayan Sudiarta Metode Numerik 194.32546657 195.56791796 196.70710118 197 . 473618865 198.64906895 199.37911545 200.17787369 200.33477623 201 . 82771388 201.82968284 204.1192577 204.11925982 207.41768566 207 . 441768566] [ 11 ] : m = np.arange (N - 1 ) plt.plot ( m , energi2 , ' ob ' ) plt.plot (m , ( m+0.5 ) ) plt.xlabel ( ' n ' ) plt.ylabel ( 'Energi ( $ \hbar \ omega$ ) ' ) plt.xlim ( [ 0,30] ) plt.ylim ( [ 0,30] ) plt.legend ( [ 'FD ' , ' eksak ' ] ) plt.show (). 377 | 382
30 • FD eksak 25 20 )(hwEnergi 10 5 0 5 10 15 20 25 30 n [ 12] : # Plot fungsi gelombang # keadaan ke n = 0, 1 , . n = 5 psin v [ : , indeks_sort [n] ] = plt.plot ( x , psin) # tambahkan garis nol plt.axhline ( y = 0 , color= ' k ' ) plt.xlabel ( ' $x$ ' ) plt.ylabel ( ' $ \psi $ ' ) plt.title ( ' Fungsi Gelombang ke n = ' tu _str ( n) ) plt.show ( ) 378 | 382
I Wayan Sudiarta Metode Numerik 379 382
Bab 17 Daftar Pustaka 1. Mathews, J. H. (1992), Numerical Methods for Mathematics, Science and Engineering, Prentice Hall, Englewood Cliffs, New Jersey. 2. Chapra, S. C. dan Canale, R. P. (2006), Nume rical Methods for Engineers, 5th Ed., Mc Graw Hill Higher Education, Boston. 3. Cheney, W. dan Kincaid, D. (1994), Numerical Mathematics and Computing, 3rd Ed., Brook s/Cole, Belmont. 4. Kuo, S. S. (1965), Numerical Methods and Com puters, Addison-Wesley, Massachusetts. 5. Atkinson, K. E. (1978), Elementary Numerical Analysis, John Wiley & Sons, New York. 381 382
6. Holoborodko, P. (2020a), Numerical Integra tion, didapat dari http://www.holoborodko. com/pavel/numerical-methods/numericalintegration/ 7. Holoborodko, P. (2020b), Stable Newton Cotes Formulas, didapat dari http: //www.holoborodko.com/pavel/numerical methods/numerical-integration/stablenewton-cotes-formulas/ 8. Gerald, C. F. dan Wheatley, P. O. (1994) Ap plied Numerical Analysis, 5th Ed., Addison Westley, Massachusetts. 9. Nakamura, S. (1996), Numerical Analysis and Graphic Visualization with MATLAB, Prentice Hall, New Jersey. 10. Fowkes, N. D. dan Mahony, J. J. (1994), An In troduction to Mathematical Modelling, John Wi ley & Sons, Chichester. 11. Boas, M. L. (1983), Mathematical Methods in the Physical Sciences, 2nd Ed., John Wiley & Sons, New York. 12. Wikipedia (2020), Gauss–Legendre Quadratu re, didapat dari https://en.wikipedia.org/ wiki/Gauss%E2%80%93Legendre_quadrature. 382 382