1. SCRIPT/SYNTAX DALAM MATLAB
clc, clear all
%DEFINISIKAN SEMUA PARAMETER DAN VARIABEL YANG KITA PUNYA
receiver_x=2000; receiver_y=1000;
source_x1=0; source_y1=250;
source_x2=0; source_y2=633;
source_x3=1000; source_y3=0;
dt_obs11=3.018; dt_obs21=2.894; dt_obs31=1.141;
n_ray=3;
%membuat koordinat kedalam bentuk matriks yang lebih "mudah" diolah
Rx=2000; Ry=1000;
Sx=[source_x1 source_x2 source_x3]; Sy=[source_y1 source_y2 source_y3];
dt_obs=[dt_obs11 dt_obs21 dt_obs31];
grid_x=0:1:2000;
grid_y=0:1:1000;
%HITUNG KECEPATAN AWAL MODEL (LINIER)
%menghitung panjang ray linier dari source ke receiver
ray_total=zeros(n_ray,1);
for i=1:n_ray
ray_total(i)=((Rx-Sx(i)).^2 + (Ry-Sy(i)).^2).^0.5;
end
%membuat kecepatan awal model linier
vsem=zeros(n_ray,1);
for i=1:n_ray
vsem(i)=ray_total(i) / dt_obs(i);
end
v0_linier=sum(vsem) / n_ray;
%menghitung dt kalkulasi linier
dt_cal_linier=zeros(n_ray,1);
for i=1:n_ray
dt_cal_linier(i)=ray_total(i) / v0_linier;
end
%menghitung delta waktu (observasi - kalkulasi)
dt_linier=zeros(n_ray,1);
for i=1:n_ray
dt_linier(i)=dt_obs(i) - dt_cal_linier(i);
end
%membuat matriks kernel
G_linier=[ray_total(1)/2 ray_total(1)/2; ...
ray_total(2)/2 ray_total(2)/2;0 ray_total(3)];
%melakukan inversi untuk mendapatkan delta S
m_linier=(inv(G_linier'*G_linier))*G_linier'*dt_linier;
%mencari kecepatan tiap blok dengan asumsi delta V >>
dv_linier=zeros(length(m_linier),1);
v_linier=zeros(length(m_linier),1);
for i=1:length(m_linier)
dv_linier(i)= (-1*m_linier(i)*v0_linier^2) / (1 +
m_linier(i)*v0_linier);
v_linier(i)=v0_linier + dv_linier(i);
end
%SHOOTING METHOD DENGAN HK. SNELL
%mendefinikan variabel yang digunakan untuk iterasi shooting
i=1; j=1; k=1; %variabel nilai awal pertambahan iterasi
sudut(1)=11; %sudut tembakan dari sorce ke-1
sudut2(1)=5.7; %sudut tembakan dari sorce ke-2
while k <= 5
2. %mendefinisikan kondisi kecepatan tiap blok untuk tiap iterasi
if k==1 %iterasi pertama memakai kecepatan linier terlebih dahulu
v_snell=v_linier;
else
v_snell=v_nonlin;
end
b1=1000; b2=1000; %mendefinisikan panjang horizontal tiap kotak
sel_1=1; sel_2=1; %mendefinisikan nilai syarat awal iterasi
while sel_1 > 0.005
%menghitung ray tracing pada SHOOT SOURCE ke-1 (Prinsip Phytagoras)
%menghitung ray shooting pada kotak pertama
c1=b1 / cosd(sudut(i));
a1=c1 * sind(sudut(i));
T1x(i)=Sx(1) + b1;
T1y(i)=Sy(1) + a1;
grad(i)=(T1y(i) - Sy(1)) / (T1x(i) - Sx(1));
%menghitung sudut pergi/sudut datang ray pada kotak 2 dengan Hk.
Snell
sudut3(i)=abs(asind((v_snell(2) * sind(sudut(i))) / v_snell(1)));
%menghitung ray shooting pada kotak kedua
c2=abs(b2 / cosd(sudut3(i)));
a2=abs(c2 * sind(sudut3(i)));
T2x(i)=T1x(i) + b2;
T2y(i)=T1y(i) + a2;
grad2(i)=(T2y(i) - T1y(i)) / (T2x(i) - T1x(i));
ray_shoot1(i,1)=(((T1x(i)-Sx(1)).^2 + (T1y(i)-Sy(1)).^2).^0.5);
ray_shoot1(i,2)=(((T2x(i)-T1x(i)).^2 + (T2y(i)-T1y(i)).^2).^0.5);
%menghitung SELISIH nilai koordinat y antara receiver dan kalkulasi
tembak
sel_1=abs(T2y(i)-Ry);
if sel_1 < 0.005
min_1=sel_1;
sudut(i);
sh_1=i;
end
i=i+1; %penambahan nilai iterasi shoot ke-1
sudut(i)=11 + (i-1)*0.0001; %sudut tembakan dari sorce ke-1
end
while sel_2 > 0.005
%menghitung ray tracing pada SHOOT SOURCE ke-2 (Prinsip Phytagoras)
%menghitung ray shooting pada kotak pertama
c3=b1 / cosd(sudut2(j));
a3=c3 * sind(sudut2(j));
T3x(j)=Sx(2) + b1;
T3y(j)=Sy(2) + a3;
grad3(j)=(T3y(j) - Sy(2)) / (T3x(j) - Sx(2));
%menghitung sudut pergi/sudut datang ray pada kotak 2 dengan Hk.
Snell
sudut4(j)=abs(asind((v_snell(2) * sind(sudut2(j))) / v_snell(1)));
%menghitung ray shooting pada kotak kedua
c4=abs(b2 / cosd(sudut4(j)));
a4=abs(c4 * sind(sudut4(j)));
T4x(j)=T3x(j) + b2;
T4y(j)=T3y(j) + a4;
grad4(j)=(T4y(j) - T3y(j)) / (T4x(j) - T3x(j));
ray_shoot2(j,1)=(((T3x(j)-Sx(2)).^2 + (T3y(j)-Sy(2)).^2).^0.5);
ray_shoot2(j,2)=(((T4x(j)-T3x(j)).^2 + (T4y(j)-T3y(j)).^2).^0.5);
%menghitung SELISIH nilai koordinat y antara receiver dan kalkulasi
3. tembak
sel_2=abs(T4y(j)-Ry);
if sel_2 < 0.005
min_2=sel_2;
sudut2(j);
sh_2=j;
end
j=j+1; %penambahan nilai iterasi shoot ke-2
sudut2(j)=5.7 + (j-1)*0.0001; %sudut tembakan dari sorce ke-2
end
%HITUNG KECEPATAN dengan prinsip tomografi persamaan yang NON-LINIER
G_nonlin=[ray_shoot1(sh_1,1) ray_shoot1(sh_1,2); ...
ray_shoot2(sh_2,1) ray_shoot2(sh_2,2)];
dt_cal_nonlin=G_nonlin*(1./v_snell);
dt_nonlin=zeros(2,1);
for i=1:2
dt_nonlin(i)=dt_obs(i) - dt_cal_nonlin(i);
end
dt_rms(k)=sqrt(sum(dt_nonlin.^2)./2);
w=(dt_nonlin.^2).^-1;
%melakukan inversi untuk mendapatkan delta S
m_nonlin=(inv(G_nonlin'*diag(w)*G_nonlin))*G_nonlin'*diag(w)*dt_nonlin;
%mencari kecepatan tiap blok dengan asumsi delta V >>
dv_nonlin=zeros(length(m_nonlin),1);
v_nonlin=zeros(length(m_nonlin),1);
for i=1:length(m_nonlin)
dv_nonlin(i)= (-1*m_nonlin(i)*v_snell(i).^2) / (1 +
m_nonlin(i)*v_snell(i));
v_nonlin(i)=v_snell(i) + dv_nonlin(i);
end
k=k+1;
end
%PLOT GRAFIK 2D KECEPATAN BLOK
figure(1)
[X Y]=meshgrid(0:1:2000, 0:1:1000);
Z=zeros(1001,2001);
Z(:,1:1000)=v_nonlin(1); Z(:,1001:2001)=v_nonlin(2);
plot(grid_x(1001),grid_y,'-r')
hold on
contourf(X,Y,Z,1)
colormap(jet); colorbar;
colorbar('YTickLabel',{'','','','','',''})
xlim([0 2000]); ylim([0 1000])
set(gca,'ydir','reverse')
xlabel('Jarak (m)'); ylabel('Kedalaman (m)'); title('Ray Tracing
Tomography')
##OUTPUT:
4. %PLOT GRAFIK RMS
figure(2)
iter=1:1:k-1;
plot(iter,dt_rms,'-b')
xlim([1 k-1]); ylim([0 0.025])
xlabel('Iterasi ke-x'); ylabel('rms (s)'); title('Grafik RMS Waktu')
##OUTPUT:
%PLOT GRAFIK 2D DENGAN RAY SHOOTING
figure(3)
plot(grid_x(1001),grid_y,'-r')
q=length(T2y);
r=length(T4y);
for i=1:length(T2y)
hold on
line([Sx(1) T1x(i)],[Sy(1) T1y(i)],'LineStyle','-')
hold on
line([T1x(i) T2x(i)],[T1y(i) T2y(i)],'LineStyle','-')
hold on
5. line([Sx(1) T1x(q)],[Sy(1) T1y(q)],'Color','r','LineStyle','-
','LineWidth',2)
hold on
line([T1x(q) T2x(q)],[T1y(q) T2y(q)],'Color','r','LineStyle','-
','LineWidth',2)
end
for i=1:length(T4y)
hold on
line([Sx(2) T3x(i)],[Sy(2) T3y(i)],'LineStyle','-')
hold on
line([T3x(i) T4x(i)],[T3y(i) T4y(i)],'LineStyle','-')
hold on
line([Sx(2) T3x(r)],[Sy(2) T3y(r)],'Color','r','LineStyle','-
','LineWidth',2)
hold on
line([T3x(r) T4x(r)],[T3y(r) T4y(r)],'Color','r','LineStyle','-
','LineWidth',2)
end
xlim([0 2000]); ylim([0 1000]); set(gca,'ydir','reverse')
xlabel('Jarak (m)'); ylabel('Kedalaman (m)'); title('Ray Tracing
Tomography')
##OUTPUT: