IN1037 . CODE INITIATION

Sesi 11: Komputasi Saintifik (NumPy & Matriks)

Gerbang ke AI dan Pemodelan: Menggunakan NumPy untuk perhitungan Vektor, Matriks, dan efisiensi Vectorization, menggantikan List untuk data numerik besar.

I. Ulasan: Mengapa NumPy? (Kecepatan & Array)

NumPy (Numerical Python) adalah pustaka fundamental untuk komputasi numerik di Python. Ia menyediakan objek array N-dimensi (ndarray) yang jauh lebih cepat dan lebih hemat memori daripada List bawaan Python, karena diimplementasikan dalam C.

Konsep Kunci: Vectorization

Vectorization berarti melakukan operasi pada seluruh array (Vektor atau Matriks) sekaligus, tanpa perlu menggunakan for loop eksplisit. Hal ini sangat meningkatkan kecepatan, terutama untuk dataset besar yang digunakan dalam Fisika Komputasi atau pembelajaran mesin (AI).

Perbedaan Kunci List vs. ndarray

Fitur List Python NumPy ndarray
Tipe Data Heterogen (bisa menyimpan int, string, objek). Homogen (hanya satu tipe data per array), lebih efisien.
Aritmetika Hanya bisa digabungkan (+) atau dikalikan (replikasi). Mendukung operasi element-wise (Matematika Matriks/Vektor).
Kecepatan Lambat untuk operasi numerik massal. Sangat cepat (vectorized).

II. Contoh Manual: Perkalian Vektor (Dot Product)

Kita ingin menghitung Dot Product antara Vektor A dan Vektor B, sebuah operasi fundamental di Aljabar Linear (Matematika) dan Mekanika (Fisika).

2.1. Formula: A $\cdot$ B = $\sum$ (ai * bi)

Vektor A: [2, 3, 4]
Vektor B: [5, 6, 7]

Kalkulasi Manual:
(2 * 5) + (3 * 6) + (4 * 7)
= 10 + 18 + 28
OUTPUT AKHIR: 56

Tanpa NumPy, Anda perlu for loop untuk setiap elemen. Dengan NumPy, Anda hanya menggunakan satu fungsi: numpy.dot().

III. Kode Praktik (Google Colab)

3.1. Kode Sederhana: Membuat Array dan Operasi Element-wise

Mendemonstrasikan perbedaan List dan ndarray dalam operasi aritmetika.

In [1]: python
import numpy as np

# 1. Array N-dimensi
A_list = [10, 20, 30] 
B_array = np.array(A_list)

# 2. Operasi List (mengulang List)
print(f"List + 5 (Error): {A_list + 5} <- ERROR")
# List + 5 akan menimbulkan TypeError

# 3. Operasi Array (Vectorization)
C_array = B_array * 2 # Perkalian element-wise
D_array = B_array + 5 # Penambahan element-wise

print(f"List * 2 (Replika): {A_list * 2}") 
print(f"Array * 2 (Element-wise): {C_array}")
print(f"Array + 5 (Element-wise): {D_array}")
Out [1]:
List * 2 (Replika): [10, 20, 30, 10, 20, 30]
Array * 2 (Element-wise): [20 40 60]
Array + 5 (Element-wise): [15 25 35]

3.2. Kode Kompleks: Solusi Sistem Persamaan Linear (Matriks)

Menyelesaikan sistem 2 persamaan linear:
1. 3x + 2y = 12
2. x + 5y = 17
Menggunakan modul linalg (Linear Algebra) NumPy.

In [2]: python
import numpy as np

# Matriks Koefisien A (3, 2) dan (1, 5)
A = np.array([
    [3, 2],
    [1, 5]
])

# Matriks Hasil B (12, 17)
B = np.array([12, 17])

# Solusi: X = inv(A) * B
try:
    solusi = np.linalg.solve(A, B)
    x = solusi[0]
    y = solusi[1]
    print(f"Solusi Ditemukan:")
    print(f"x = {x:.2f}")
    print(f"y = {y:.2f}")
except np.linalg.LinAlgError:
    print("Error: Matriks singular (tidak ada solusi unik).")
Out [2]:
Solusi Ditemukan:
x = 2.00
y = 3.00

3.3. Studi Kasus: Kalkulasi Energi Kinetik (Vectorization)

Hitung Energi Kinetik (Ek = (1/2)m v2) untuk 1000 objek secara instan, tanpa perulangan Python.

In [3]: python
import numpy as np

# Data Besar: 1000 nilai massa (random)
M_data = np.random.uniform(low=1.0, high=5.0, size=1000) # kg
# Data Besar: 1000 nilai kecepatan (random)
V_data = np.random.uniform(low=5.0, high=15.0, size=1000) # m/s

# Vectorization: Mengalikan seluruh Array secara Element-wise
# E_k = 0.5 * M_data * V_data^2
Energi_Kinetik_Array = 0.5 * M_data * (V_data ** 2)

# Mencetak 5 hasil pertama
print(f"Massa (5 pertama): {M_data[:5]}")
print(f"Kecepatan (5 pertama): {V_data[:5]}")
print(f"Energi Kinetik (5 pertama): {Energi_Kinetik_Array[:5].round(2)}")

# Menghitung Rata-rata Energi dari 1000 data
rata_rata_energi = np.mean(Energi_Kinetik_Array)
print(f"\nRata-rata Energi Total: {rata_rata_energi:.2f} Joule")
Out [3]:
Massa (5 pertama): [4.07 2.15 1.77 4.98 3.52]
Kecepatan (5 pertama): [11.23 6.09 13.91 14.78 12.01]
Energi Kinetik (5 pertama): [256.40 39.98 171.30 543.10 253.97]

Rata-rata Energi Total: 219.75 Joule

IV. Penugasan / PR Sesi 11: Kalkulasi Rotasi Vektor 2D

Tugas Anda adalah menggunakan NumPy untuk menghitung rotasi sebuah vektor di bidang 2D sebesar sudut θ (misalnya, 30°).

  1. Definisi Matriks: Buat Matriks Rotasi R dan Vektor posisi V.
  2. Formula: Vektor baru V′ = R · V.
  3. Kode: Gunakan np.dot() atau operator @ untuk perkalian matriks.
  4. Pengujian: Rotasikan vektor [4, 0] sebesar 90°. Hasilnya harus sekitar [0, 4]. (Gunakan fungsi np.radians() untuk konversi sudut).