for end; if then elif else
)¶Dalam sebuah perhitungan dengan komputer, seringkali kita berhadapan dengan keadaan dimana kita perlu menghitung sesuatu secara berulang. Misalnya, pada saat menghitung nilai medan gravitasi pada sebuah titik akibat adanya benda anomali di bawah permukaan bumi, maka kita perlu mengulang-ulang perhitungan (menggunakan hukum gravitasi Newton) pada titik-titik yang dikehendaki (Gambar 1).
Gambar 1. Benda anomali berupa bola yang terpendam di bawah permukaan, hendak dihitung anomali gravitasinya di permukaan dengan nilai F1...FN. Masing-masing memiliki jarak R tertentu untuk masing-masing titik pengukuran F di permukaan, harus dihitung dengan rumus yang sama secara berulang-ulang, dari 1 sampai N.
Berdasarkan Gambar 1, Besarnya gaya tarik gravitasi pada titik $F_1$, dirumuskan menggunakan Hukum Newton, sebagai berikut
dengan $\gamma$ adalah konstanta gravitasi universal, sebesar $6,67 \times 10^{-11} m^3.kg^{-1}.s^{-2}$, $\frac{4}{3}\pi a^2 \rho$ adalah masa dari bola pejal, dengan radius 𝑎 dan densitas 𝜌 dan 𝑅 adalah jarak titik pengamatan / perhitungannya.
Hayo, bagaimanakah kita dapat menghitung $\vec{g}$ di tiap-tiap titik pengamatan, F1, F2,... FN?
Nah, dalam pemrograman, kita perlu proses perulangan untuk menghitung gaya tarik gravitasional tersebut. Pada Python, kita dapat menggunakan perintah for, dengan sintaks sebagai berikut
for variabel in sekumpulan info:
do sesuatu dengan variabel
varibel boleh dinamai apa saja, tapi disarankan yang mnemonic, atau berhubungan dengan namanya dan mudah ditebak maksudnya, misalnya kalau itu sebuah indeks, dari 1 sampai n, maka variable bisa dinamai i saja atau kalau missal temperature ya bisa dengan temp, dst. Contoh :
angka = [1,2,3,4,5,6,7]
for nilai in angka:
print(nilai)
1 2 3 4 5 6 7
Programmer hebat seperti Dimitri Komatitsch senang membuat variableyang “lugu” sehingga menjadi Panjang Namanya,tapi sangat mudah dan tidak perlu ditebak maksudnya.Python memberikan fungsi built-in yang namanya range
,yang menghasilkan sebuah deret angka dari 1 ke N. Fungsi range
dapat menerima maksimal 3 argumen input (range(argument_1,argument_2,argument_3)
), dengan aturan sebagai berikut:
range(3)
akan menghasilkan bilangan 0, 1, 2.range
akan memulai dengan angka pertama dan berakhir tepat sebelum angka ke– di parameter kedua, dengan penambahan sebesar 1. Jadi, range(2, 5)
menghasilkan2, 3, 4.range
diberi sebanyak 3 parameter, dia akan memulai dengan angka pertama, diakhiri dengan angka kedua, dengan penambahan sebesar anka ketiga. Misalnya, range(3, 10, 2)
menghasilkan3, 5, 7, 9.(PDF) Materi Metkom Geofisika. Available from: https://www.researchgate.net/publication/323930962_Materi_Metkom_Geofisika [accessed Mar 22 2019].
Contoh-contoh lebih banyak dapat ditemukan diberbagai website, dengan bantuan Google.Kembali ke pembahasan diatas mengenai perhitungan yang berulang, jadi kita perlu secara berulang, dengan perintah for, untuk sejumlah N titik data, hitung nilai g.Dari sini, muncul masalah baru, yaitu bahwa kita memerlukan sebuah program pendek, untuk menghitung gaya tarikgravitasinya.Dalam istilah komputasi, program pendek tersebut disebut dengan fungsi (function).
def namafungsi:
)¶Pada Python, definisi sebuah fungsi dibuat memakai kata kunci def
yang diikuti dengan nama fungsinya, lantas diikuti lagi dengan nama parameter-parameter (variable) fungsi yang dibatasi dengan tanda kurung.Tubuh dari fungsi tersebut, yang berisi perintah-perintah Python yang harus dieksekusi, harus ditulis menjorok ke kanan sejauh (minimal) 4 spasi. Sebagai tauladan, dibawah ini adalah sebuah fungsi untuk mengkonversi dari skala temperature Fahrenheit ke skala Kelvin:
def fahrenheit_ke_kelvin(suhu):
return((suhu-32)*(5/9))+273.15
fahrenheit_ke_kelvin(-40)
233.14999999999998
Kembali kelap-top ! Untuk itu, perhatikan bagaimana implementasi dari persamaan (1) menjadi sebuah fungsi dalam Python.
#```--------Program menghitung gaya tarik gravitasi-------------------```
#``` benda berbentuk bola ```
#```------------------------------------------------------------------```
gamma = 6.6E-11
si2mg = 1.0E5
pi = 3.14159265
km2m = 1.E3
ierror = 0
import math
import matplotlib.pyplot as plt
def bola(xq,yq,zq,a,rho,xp,yp,zp):
#``` titik pengamatan terletak pada koordinat (xq,yq,zq), sementara pusat bola adalah di (xp,yp,zp). Jari-jari bola adalah a
#``` dan densitas adalah rho. Densitas satuannya kg/m^3, jarak dalam km
rx = xp - xq
ry = yp - yq
rz = zp - zq
r = math.sqrt(math.pow(rx,2)+math.pow(ry,2)+math.pow(rz,2))
if r == 0:
print("R-nya nol, ubah kedalaman!")
r3 = math.pow(r,3)
tmass = 4.0 * pi * rho * (math.pow(a,2))/3
gx = -gamma * tmass * rx/r3
gy = -gamma * tmass * ry/r3
gz = -gamma * tmass * rz/r3
gx = gx * si2mg * km2m
gy = gy * si2mg * km2m
gz = gz * si2mg * km2m
return gx, gy, gz
Perhatikan bahwa persamaan (1) diimplementasikan secara bertahap, dengan menghitung r nya dulu terhadap setiap titik amat xp, baru dihitung g nya untuk setiap komponen x, y dan z. Untuk memanggilnya, kita masukkan parameter posisi benda dan posisi titik amat, densitas dan jejari bolanya. Misalnya kita ingin menghitung gaya Tarik gravitasi untuk bola dengan jari-jari 0,5 km yang letaknya di posisi x = 0, y = 0 dan kedalaman 2 km, dengan densitas 2600 kg/m3 pada posisi x-amat = 1, y-amat = 1 dan z-amat =0 sebagai berikut
gx,gy,gz = bola(0,0,2,0.5,2600,1,1,0)
gz
2.4453950067143504
Dengan fungsi ini, sebaran gaya tarik gravitasi pada sebuah luasan tertentu dengan mudah bisa dilakukan. Misalnya jika hendak dihitung gaya gravitasi pada area seluas 100km × 100 km, untuk anomaly yang letaknya di x = 20 km y = -20 km dapat dipanggil
from mpl_toolkits import mplot3d
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import numpy as np
x = np.linspace(-50,50,100)
y = np.linspace(-50,50,100)
X,Y = np.meshgrid(x,y)
G=np.zeros((100,100))
for i in range(100):
for j in range(100):
gx, gy, gz = bola(20,-20,5,1,2600,X[i,j],Y[i,j],0)
G[i,j]=gz
fig = plt.figure()
ax = plt.axes(projection='3d')
surf = ax.plot_surface(X, Y, G, cmap=cm.coolwarm,linewidth=0, antialiased=False)
plt.show()
Bagus, khan .. Coba diubah-ubah posisi titik amatnya, dan parameter bolanya..
import requests
url="http://berkeleyearth.lbl.gov/auto/Regional/TAVG/Text/hawaii-TAVG-Trend.txt"
response=requests.get(url)
with open("hawaii-temp.txt","w") as open_file:
open_file.write(response.text)
import numpy as np
data = np.loadtxt("hawaii-temp2.txt")
plt.plot(data[:,2])
plt.show()
pwd
u'C:\\Users\\User\\Documents\\GitHub\\Kuliah_MetKom'
List vs Array vs Matrix
Library numpy
import numpy as np => import library numpy and call it “np” => then use np.(tab)
List:
You can put anything in a list
Calculation on a list doesn’t really work
a_list=[1,2,3]
#calculate with list => repeats the list
a_list*2
[1, 2, 3, 1, 2, 3]
numpy array:
Use numpy.array([ (element0), (element1), (element2) ]) to create array
Calculation on array applies to each element
a_array=np.array([1,2,3])
#calculate with array => calculate on each element
a_array*2
array([2, 4, 6])
Matrix:
Is a list of lists. The first line is the first element in the list. And calculation works too.
a_mat=np.array([[1,2,3],[4,5,6],[7,8,9]])
a_mat
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
a_mat*2
array([[ 2, 4, 6],
[ 8, 10, 12],
[14, 16, 18]])
To get the element in a matrix:
Matrix[ (row #), (column #) ]
Matrix[ : , (column #) ] <= use : to get the entire row or column
#get row2, column3
A_mat[1,2] =output=> 6
#get second row
A_mat[1,:] =output=> array([4, 5, 6])
numpy array functions:
# use np.(function name)
np.min(data[:,1])
18.850448
# numpy array.(function name) => does the same thing
data[:,1].min()
18.850448
Tips:
Pwd => get your working directory
Import data into an array
File "<ipython-input-41-e2cc8a07136c>", line 1 List vs Array vs Matrix ^ SyntaxError: invalid syntax