Assalamuโalaikum Warahmatullahi Wabarakatuh
Puji syukur ke hadirat Allah SWT yang selalu memberikan kita nikmat iman, ihsan, serta sehat wal-โafiat sehingga saya bisa berkesempatan untuk mengerjakan tugas Metode Numerik ini
Shalawat serta salam tak pernah lupa dihaturkan kepada Nabi Muhammad S.A.W yang telah membawa evolusi dari zaman jahiliyyah menuju ke zaman yang terang benderang ini.
Pada hari Senin, 24 Maret 2025 saya memulai untuk melakukan iterasi terkait apa yang dibahas minggu lalu dan menuangkannya disini untuk memenuhi tugas Metode Numerik yang diberikan oleh Pak DAI.

PINN (Physics-Informed Neural Networks) merupakan pendekatan modern yang menggabungkan jaringan saraf tiruan dengan hukum fisika untuk menyelesaikan persamaan diferensial parsial (PDE), seperti yang muncul dalam masalah konduksi panas 1D. Dalam konteks ini, PINN memungkinkan kita untuk memprediksi distribusi suhu pada suatu material berdasarkan persamaan panas, dengan memanfaatkan data (jika ada) dan pengetahuan fisika yang dienkode dalam PDE.
Disini bisa dimanfaatkan seperti VSCode, Python, Numpy, PyTorch, dan Matplotlib untuk melakukan plotting grafik perbandingan suhu (T) dengan posisi (x). Berikut ini adalah codingan python yang telah disediakan untuk plot grafik terkait kemudian :
import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt
import tkinter as tk
from tkinter import ttk
import tkinter.messagebox
# Define the PINN neural network
class PINN(nn.Module):
def __init__(self):
super(PINN, self).__init__()
self.net = nn.Sequential(
nn.Linear(1, 20),
nn.Tanh(),
nn.Linear(20, 20),
nn.Tanh(),
nn.Linear(20, 1)
)
def forward(self, x):
return self.net(x)
# Function to compute the loss
def compute_loss(model, x, T0, T1):
x = x.requires_grad_(True)
T = model(x)
# Compute derivatives
dT_dx = torch.autograd.grad(T, x, grad_outputs=torch.ones_like(T), create_graph=True)[0]
d2T_dx2 = torch.autograd.grad(dT_dx, x, grad_outputs=torch.ones_like(dT_dx), create_graph=True)[0]
# Physics loss (d^2T/dx^2 = 0)
physics_loss = torch.mean(d2T_dx2**2)
# Boundary conditions
T_left = model(torch.tensor([[0.0]]))
T_right = model(torch.tensor([[1.0]]))
bc_loss = (T_left - T0)*2 + (T_right - T1)*2
return physics_loss + bc_loss
# Training function
def train_pinn(T0, T1, epochs=1000):
model = PINN()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
x = torch.linspace(0, 1, 100).reshape(-1, 1)
for epoch in range(epochs):
optimizer.zero_grad()
loss = compute_loss(model, x, T0, T1)
loss.backward()
optimizer.step()
if epoch % 100 == 0:
print(f"Epoch {epoch}, Loss: {loss.item():.6f}")
return model
# Function to plot results
def plot_results(model, T0, T1):
x = torch.linspace(0, 1, 100).reshape(-1, 1)
with torch.no_grad():
T_pred = model(x).numpy()
x = x.numpy()
T_analytical = T0 + (T1 - T0) * x
plt.figure(figsize=(8, 6))
plt.plot(x, T_pred, label="PINN Solution")
plt.plot(x, T_analytical, '--', label="Analytical Solution")
plt.xlabel("x")
plt.ylabel("Temperature")
plt.title("1D Steady-State Heat Conduction")
plt.legend()
plt.grid(True)
plt.show()
# GUI Application
class PINNApp:
def __init__(self, root):
self.root = root
self.root.title("PINN 1D Heat Conduction Solver")
# Labels and Entries
ttk.Label(root, text="T0 (Left Boundary, ยฐC):").grid(row=0, column=0, padx=5, pady=5)
self.T0_entry = ttk.Entry(root)
self.T0_entry.grid(row=0, column=1, padx=5, pady=5)
self.T0_entry.insert(0, "100")
ttk.Label(root, text="T1 (Right Boundary, ยฐC):").grid(row=1, column=0, padx=5, pady=5)
self.T1_entry = ttk.Entry(root)
self.T1_entry.grid(row=1, column=1, padx=5, pady=5)
self.T1_entry.insert(0, "0")
ttk.Label(root, text="Epochs:").grid(row=2, column=0, padx=5, pady=5)
self.epochs_entry = ttk.Entry(root)
self.epochs_entry.grid(row=2, column=1, padx=5, pady=5)
self.epochs_entry.insert(0, "1000")
# Solve Button
self.solve_button = ttk.Button(root, text="Solve & Plot", command=self.solve)
self.solve_button.grid(row=3, column=0, columnspan=2, pady=10)
def solve(self):
try:
T0 = float(self.T0_entry.get())
T1 = float(self.T1_entry.get())
epochs = int(self.epochs_entry.get())
model = train_pinn(T0, T1, epochs)
plot_results(model, T0, T1)
except ValueError:
tk.messagebox.showerror("Error", "Please enter valid numerical values.")
# Run the GUI
if __name__ == "__main__":
root = tk.Tk()
app = PINNApp(root)
root.mainloop()
Untuk memahami dan menerapkan PINN secara mendalam, saya menggunakan DAI5 Framework, sebuah kerangka berpikir yang dikembangkan oleh Dr. Ahmad Indra, yang terdiri dari lima langkah: Deep Awareness (of) I, Intention, Initial Thinking (about the Problem), Idealization, dan Instruction Set. Pendekatan ini tidak hanya membantu saya memahami aspek teknis PINN, tetapi juga menanamkan kesadaran spiritual dan niat yang lebih luas dalam prosesnya.
1. Deep Awareness (of) I (Kesadaran Mendalam tentang Diri)
Langkah pertama, Deep Awareness (of) I, mengajak kita untuk memiliki kesadaran mendalam tentang diri dan Sang Pencipta yang telah menciptakan hukum-hukum alam. Dalam konteks konduksi panas 1D, hukum fisika yang relevan adalah persamaan panas:

Di sini, u(x,t) mewakili suhu pada posisi x dan waktu t, sementara ฮฑ adalah difusivitas termal yang menggambarkan seberapa cepat panas menyebar dalam material. Persamaan ini adalah cerminan dari tatanan alam yang diciptakan oleh Sang Pencipta, menunjukkan bagaimana energi panas mengalir secara teratur dan terprediksi. Dengan menyadari hal ini, saya memandang PINN tidak hanya sebagai alat teknis, tetapi juga sebagai sarana untuk mengagumi kebijaksanaan Sang Pencipta yang tercermin dalam hukum fisika. Kesadaran ini menjadi fondasi yang memperkaya proses pemahaman dan penerapan saya.
2. Intention (Niat)
Langkah kedua, Intention (Niat), menekankan pentingnya memiliki tujuan yang jelas dan sadar. Niat saya dalam memahami PINN untuk konduksi panas 1D adalah untuk menguasai metode ini dengan baik, sehingga dapat menghasilkan solusi yang akurat dan bermanfaat dalam memodelkan fenomena fisik. Lebih jauh lagi, saya berniat untuk menggunakan pengetahuan ini sebagai wujud syukur kepada Sang Pencipta, dengan harapan dapat memanfaatkannya untuk kebaikan yang selaras dengan kehendak-Nya. Niat ini menjadi pemandu yang memastikan bahwa setiap langkah yang saya ambil memiliki makna lebih dari sekadar pencapaian teknis.
3. Initial Thinking (about the Problem) (Pemikiran Awal tentang Masalah)
Kode memodelkan masalah konduksi panas 1D sederhana: suhu berubah secara linear dari T0 (misalnya 100ยฐC) di ujung kiri (x=0) ke T1 (misalnya 0ยฐC) di ujung kanan (x=1). PINN dilatih untuk menemukan fungsi suhu T(x) yang memenuhi persamaan diferensial dan kondisi batas tersebut. Pemikiran awal ini mengarahkan kita pada solusi analitik (garis lurus), yang jadi acuan untuk membandingkan hasil PINN.
PINN bekerja dengan melatih jaringan saraf untuk memprediksi u(x,t) sedemikian rupa sehingga memenuhi persamaan panas dan kondisi-kondisi tersebut. Proses ini dilakukan dengan mendefinisikan fungsi kerugian yang terdiri dari dua bagian utama:
- Residual PDE: Mengukur seberapa baik prediksi jaringan saraf mematuhi persamaan panas.
- Kesalahan pada kondisi awal/batas: Memastikan solusi sesuai dengan data atau kondisi yang diberikan.
Pemikiran awal ini membantu saya merumuskan strategi untuk membangun model PINN yang efektif, dengan mempertimbangkan bagaimana jaringan saraf dapat “belajar” hukum fisika secara langsung.
4. Idealization (Idealisasi)
Langkah keempat, Idealization (Idealisasi), melibatkan pembuatan asumsi untuk menyederhanakan masalah tanpa kehilangan esensinya. Dalam penerapan PINN untuk konduksi panas 1D, beberapa asumsi yang mungkin saya buat adalah:
- Jaringan saraf yang digunakan cukup fleksibel untuk merepresentasikan solusi u(x,t) dengan akurasi tinggi.
- Kondisi batas dan awal memiliki bentuk sederhana, seperti suhu konstan di ujung batang atau distribusi suhu awal yang seragam.
- Material dianggap homogen, sehingga ฮฑ konstan sepanjang domain.
Asumsi-asumsi ini memungkinkan saya untuk fokus pada inti masalah dan mengimplementasikan PINN dengan lebih mudah, sambil tetap memastikan bahwa penyederhanaan tersebut mendukung niat saya untuk memahami dan menerapkan metode ini secara benar.
5. Instruction Set (Set Instruksi)
Langkah terakhir, Instruction Set (Set Instruksi), memberikan langkah-langkah konkret untuk menerapkan solusi. Dalam konteks PINN untuk konduksi panas 1D, prosedurnya meliputi:
- Mendefinisikan PINN: Jaringan saraf dengan arsitektur nn.Sequential.
- Menghitung loss: Gabungan physics loss (memastikan d^2T/dx^2โ0 dan boundary condition loss (T(0) = T0, T(1) = T1).
- Melatih model: Menggunakan optimizer Adam selama sejumlah epoch (default 1000), dan saya memvariasikan 3000, 8000, dan 10000 untuk mencari tahu perbedaan pengaruhnya.
- Visualisasi: Membandingkan prediksi PINN dengan solusi analitik T(x) = T0 + (T1 – T0)x. GUI dengan Tkinter mempermudah input T0, T1, dan epochs oleh pengguna.

Ini adalah plot untuk input epochs = 1000

Ini adalah plot untuk input epochs = 3000

Ini adalah plot untuk input epochs = 8000

Ini adalah plot untuk input epochs = 10000

Selama melaksanakan langkah-langkah ini, saya terus mengacu pada niat awal saya, memastikan bahwa proses ini tidak hanya menghasilkan solusi teknis, tetapi juga mencerminkan kesadaran dan tujuan yang lebih tinggi.
Keunikan PINN untuk Heat Conduction 1D
- Tidak perlu data pelatihan tradisional (hanya titik x dan hukum fisika).
- Menggabungkan PDE dan kondisi batas langsung ke dalam loss, sehingga solusi “dipandu” oleh fisika.
- Dalam kasus ini, meski solusinya sederhana (linear), PINN menunjukkan kemampuannya menyelesaikan PDE secara numerik tanpa metode tradisional seperti finite difference.
…
Jadi, kesimpulannya adalah melalui DAI5 Framework, saya dapat memahami dan menerapkan PINN pada konduksi panas 1D dengan cara yang terstruktur dan bermakna.
Deep Awareness mengingatkan saya akan kebesaran Sang Pencipta yang tercermin dalam hukum alam. Intention memberikan arah dan makna pada usaha saya.Initial Thinking dan Idealization membantu saya menganalisis dan menyederhanakan masalah secara logis, sementara Instruction Set menyediakan panduan praktis untuk implementasi.
Demikian yang saya kerjakan, apabila ada kesalahan mohon kritik dan sarannya. Terima kasih
Wassalamuโalaikum Warahmatullahi Wabarakatuh.