MODUL KE – 5
INVERSI NON LINEAR
Oleh:
Muhamad Arif Samsudin 120120158
Asisten :
Alifah Iftinan 119120042
Andika Bonardo Sipahutar 119120122
Bernard Cavin Ronlei 119120087
Kiki Harfianza 119120111
Mu'amar Hafiz 119120084
Nisa Nur Azizah 119120027
Gambar 1.1.2 Kurva Erms vs Iterasi Metode Grid Search L:0.1 dan P:10
1.2 Variasi L:1 dan P:10.
Gambar 1.2.2 Kurva Erms vs Iterasi Metode Grid Search L:1 dan P:10
1.3 Variasi L:3 dan P:10.
Gambar 1.3.2 Kurva Erms vs Iterasi Metode Grid Search L:3 dan P:10
1.4 Variasi L:1 dan P:20.
Gambar 1.4.2 Kurva Erms vs Iterasi Metode Grid Search L:1 dan P:20
1.5 Variasi L:1 dan P:30.
Gambar 1.5.2 Kurva Erms vs Iterasi Metode Grid Search L:1 dan P:30
➢ Problem 2 : Penentuan lokasi hiposenter gempa dengan inversi non
linear Monte Carlo
2.1 Variasi nilai N:100
Variasi nilai L dan P dapat mempengaruhi hasil dari Grid Search. Nilai L menentukan lebar grid
pada ruang model. Semakin kecil nilai L, semakin detail grid yang dihasilkan, sehingga dapat
meningkatkan akurasi dalam menemukan solusi hiposenter yang tepat. Namun, semakin kecil nilai
L, semakin banyak pula iterasi yang diperlukan sehingga waktu komputasi dapat meningkat.
Sementara itu, nilai P menentukan batas kesalahan toleransi atau batas RMS error pada setiap
iterasi. Semakin kecil nilai P, semakin ketat toleransi kesalahan yang diperbolehkan, sehingga
solusi hiposenter yang dihasilkan akan semakin akurat. Namun, semakin kecil nilai P, semakin
sedikit solusi hiposenter yang terpilih dan semakin banyak iterasi yang diperlukan untuk mencapai
solusi hiposenter yang tepat.
Metode Monte Carlo merupakan salah satu teknik inversi non-linear untuk menentukan
lokasi hiposenter gempa. Pada metode ini, titik hiposenter akan ditemukan dengan membangkitkan
titik secara acak pada ruang model dan memperbarui titik tersebut berdasarkan nilai residual yang
dihasilkan dari perbandingan waktu tiba gelombang gempa yang diamati dengan waktu tiba
gelombang gempa yang dihitung dengan memasukkan parameter-parameter model yang
dihasilkan. Dalam kode tersebut, parameter N digunakan untuk menentukan lebar grid ruang model
dengan menghasilkan N titik dalam rentang koordinat X dan Y. Ketika nilai N dinaikkan, akan
dihasilkan lebih banyak titik dalam ruang model, sehingga resolusi model akan meningkat. Hal ini
dapat meningkatkan akurasi dalam menentukan lokasi hiposenter gempa. Namun, peningkatan
nilai N juga akan meningkatkan waktu komputasi yang dibutuhkan untuk menghitung posisi
hiposenter gempa, karena program harus menghitung jarak antara setiap titik dalam ruang model
dengan setiap stasiun pengamatan. Oleh karena itu, pemilihan nilai N harus menjadi pertimbangan
antara akurasi dan kecepatan komputasi yang diinginkan.
Lampiran
Script 1 Metode Grid Search
#Muhamad Arif Samsudin
#Modul05_Problem01
#Grid Search
import numpy as np
import matplotlib.pyplot as plt
from numpy.linalg import inv
Vavg = 4
tobs = [7.1,1.8,5.0,7.9]
#Menentukan Jumlah Stasiun
tobs = np.reshape(tobs,(len(tobs),1))
Xsts = [20,50,40,10]
Ysts = [10,25,50,40]
#Definisikan ruang model
L = 1 #lebar grid
X0 = np.arange(0,50,L)
Y0 = np.arange(0,50,L)
P = 30
Erms = []
HypoX = []
HypoY = []
for i in range(len(Y0)):
for j in range(len(X0)):
# tcal = []
Dt = []
for k in range(len(Xsts)):
tcal=(np.sqrt((X0[j]-Xsts[k])**2+(Y0[i]-Ysts[k])**2)/Vavg)
Dt.append((tobs[k]-tcal)**2)
misfit = np.sqrt(np.mean(Dt))
if misfit < P:
HypoX.append(X0[j])
HypoY.append(Y0[i])
Erms.append(misfit)
P = misfit
else : pass
print('Dt', Dt)
Hypo = np.array([HypoX,HypoY])
print(Hypo)
plt.figure()
Xgrid, Ygrid = np.meshgrid(X0, Y0)
plt.scatter(Xgrid.ravel(), Ygrid.ravel(), s=0.5)
plt.plot(HypoX,HypoY, '-r')
plt.plot(HypoX [0],HypoY [0],'*c', label='awal')
plt.plot(HypoX[len(HypoX)-1], HypoY[len(HypoY)-1], '*y',label='akhir')
plt.plot(Xsts,Ysts,'v',label='stasiun')
plt.xlabel('x')
plt.xlabel('y')
plt.legend()
plt.show()
plt.figure()
plt.plot(Erms)
plt.title('Kurva Erms vs Iterasi (120120158)')
plt.xlabel('Jumlah Iterasi')
plt.ylabel('RMS Error')
plt.show()
plt.figure()
#Tebakan Awal
x0 = 0
y0 = 0
dt = []
for i in range (len(Xsts)):
for k in range (len(Ysts)):
tc1 = (np.sqrt((Ysts[i] - y0) **2 + (Xsts[i]-x0)**2)/Vavg)
dt.append((tobs[k]- tc1)**2)
P = np.sqrt(np.mean(dt))
HypoX = []
HypoY = []
Erms = []
for i in range (len(Y0)):
for j in range(len(X0)) :
# tcal = []
Dt = []
Tcal = []
for k in range(len(Xsts)):
tcal =(np.sqrt((X0[j] - Xsts[k]) ** 2 + (Y0[i] - Ysts[k]) ** 2)/Vavg)
Tcal.append(tcal)
Dt.append((tobs[k]-tcal)**2)
misfit = np.sqrt(np.mean(Dt))
if misfit < P:
HypoX.append(X0[j])
HypoY.append(Y0[i])
Erms.append(misfit)
P = misfit
else : pass
Hypo = np.array([HypoX,HypoY])
time = np.reshape(Dt,(len(Dt),1))
print('Nilai Delay Time',time)
print(Hypo)
print('Dt =', Dt)
#Plot Hasil
plt.figure()
Xgrid, Ygrid = np.meshgrid(X0, Y0)
plt.scatter(Xgrid.ravel(), Ygrid.ravel(),s=0.5)
plt.plot(HypoX,HypoY,'-r')
plt.plot(HypoX[0],HypoY[0],'*c',label='Awal')
plt.plot(HypoX[len(HypoX)-1],HypoY[len(HypoY)-1],'*y',label='Akhir')
plt.plot(Xsts,Ysts,'v',label='Stasiun')
plt.xlabel
plt.ylabel
plt.legend()
plt.show()