<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.haidhi.my.id/wiki/index.php?action=history&amp;feed=atom&amp;title=Step_1%3A_Konveksi_linear_1-D</id>
	<title>Step 1: Konveksi linear 1-D - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.haidhi.my.id/wiki/index.php?action=history&amp;feed=atom&amp;title=Step_1%3A_Konveksi_linear_1-D"/>
	<link rel="alternate" type="text/html" href="https://wiki.haidhi.my.id/wiki/index.php?title=Step_1:_Konveksi_linear_1-D&amp;action=history"/>
	<updated>2026-11-01T23:47:59Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.haidhi.my.id/wiki/index.php?title=Step_1:_Konveksi_linear_1-D&amp;diff=817&amp;oldid=prev</id>
		<title>SanzSkuy: Created page with &quot;&#039;&#039;&#039;Konveksi linear 1-D&#039;&#039;&#039; adalah PDE paling sederhana yang bisa dipakai buat belajar fondasi CFD. Persamaan ini memodelkan gelombang yang merambat dengan kecepatan konstan tanpa berubah bentuk. Walaupun kelihatan remeh, hampir semua ide inti CFD — diskritisasi, time-stepping, stabilitas, numerical diffusion — udah muncul di sini.  == Persamaan ==  &lt;math&gt;\frac{\partial u}{\partial t} + c \frac{\partial u}{\partial x} = 0&lt;/math&gt;  {| class=&quot;wikitable&quot; ! Simbol !! Ar...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.haidhi.my.id/wiki/index.php?title=Step_1:_Konveksi_linear_1-D&amp;diff=817&amp;oldid=prev"/>
		<updated>2026-07-19T08:49:51Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Konveksi linear 1-D&amp;#039;&amp;#039;&amp;#039; adalah PDE paling sederhana yang bisa dipakai buat belajar fondasi &lt;a href=&quot;/wiki/index.php?title=CFD&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;CFD (page does not exist)&quot;&gt;CFD&lt;/a&gt;. Persamaan ini memodelkan gelombang yang merambat dengan kecepatan konstan tanpa berubah bentuk. Walaupun kelihatan remeh, hampir semua ide inti CFD — diskritisasi, time-stepping, stabilitas, numerical diffusion — udah muncul di sini.  == Persamaan ==  &amp;lt;math&amp;gt;\frac{\partial u}{\partial t} + c \frac{\partial u}{\partial x} = 0&amp;lt;/math&amp;gt;  {| class=&amp;quot;wikitable&amp;quot; ! Simbol !! Ar...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Konveksi linear 1-D&amp;#039;&amp;#039;&amp;#039; adalah PDE paling sederhana yang bisa dipakai buat belajar fondasi [[CFD]]. Persamaan ini memodelkan gelombang yang merambat dengan kecepatan konstan tanpa berubah bentuk. Walaupun kelihatan remeh, hampir semua ide inti CFD — diskritisasi, time-stepping, stabilitas, numerical diffusion — udah muncul di sini.&lt;br /&gt;
&lt;br /&gt;
== Persamaan ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} + c \frac{\partial u}{\partial x} = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Simbol !! Arti !! Analogi&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;u(x,t)&amp;lt;/math&amp;gt; || besaran yang diangkut (mis. konsentrasi) || tinggi air / asap di angin&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; || kecepatan rambat (konstan) || kecepatan angin&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;\partial u / \partial t&amp;lt;/math&amp;gt; || laju perubahan di satu titik seiring waktu || &amp;quot;seberapa cepat berubah sambil gua diem nunggu&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;\partial u / \partial x&amp;lt;/math&amp;gt; || kemiringan spasial || &amp;quot;beda gua dengan sensor sebelah&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Cara baca (disusun ulang): &amp;lt;math&amp;gt;\partial u/\partial t = -c\,\partial u/\partial x&amp;lt;/math&amp;gt; → &amp;#039;&amp;#039;&amp;#039;perubahan terhadap waktu di suatu titik ditentukan oleh kemiringan spasial di titik itu, dikali kecepatan.&amp;#039;&amp;#039;&amp;#039; Informasi datang dari arah hulu (upstream).&lt;br /&gt;
&lt;br /&gt;
=== Solusi eksak ===&lt;br /&gt;
&lt;br /&gt;
Dengan kondisi awal &amp;lt;math&amp;gt;u(x,0) = u_0(x)&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;u(x,t) = u_0(x - ct)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Artinya: bentuk awal &amp;#039;&amp;#039;&amp;#039;digeser&amp;#039;&amp;#039;&amp;#039; ke kanan sejauh &amp;lt;math&amp;gt;ct&amp;lt;/math&amp;gt;, tanpa berubah bentuk. Puncak yang awalnya di &amp;lt;math&amp;gt;x=5&amp;lt;/math&amp;gt; pada waktu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; ada di &amp;lt;math&amp;gt;x = 5 + ct&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Solusi eksak ini penting sebagai &amp;#039;&amp;#039;&amp;#039;alat verifikasi&amp;#039;&amp;#039;&amp;#039;: kalau hasil numerik menyimpang, kita tahu itu salah metode, bukan salah fisika. (Konsep terkait: [[Method of Manufactured Solutions]].)&lt;br /&gt;
&lt;br /&gt;
== Analogi: estafet bisik-bisik ==&lt;br /&gt;
&lt;br /&gt;
 Anak-anak berdiri sejajar, jarak antar anak = Δx.&lt;br /&gt;
 Tiap ronde (Δt), pesan cuma boleh dibisikkan ke tetangga sebelah.&lt;br /&gt;
&lt;br /&gt;
    o    o    o    o    o    o        ← sensor / titik grid&lt;br /&gt;
    |----|&lt;br /&gt;
      Δx&lt;br /&gt;
&lt;br /&gt;
 Gelombang lari dengan kecepatan c.&lt;br /&gt;
 Dalam satu ronde, gelombang menempuh jarak c·Δt.&lt;br /&gt;
&lt;br /&gt;
 c·Δt ≤ Δx  → gelombang TIDAK menyalip pesan → simulasi aman&lt;br /&gt;
 c·Δt &amp;gt; Δx  → gelombang menyalip → anak &amp;quot;ngarang&amp;quot; → MELEDAK&lt;br /&gt;
&lt;br /&gt;
== Diskritisasi ==&lt;br /&gt;
&lt;br /&gt;
Komputer tidak mengerti turunan (konsep limit / jarak tak-hingga kecil). Yang dia punya cuma:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Grid ruang&amp;#039;&amp;#039;&amp;#039;: titik &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i = 0 \dots N&amp;lt;/math&amp;gt;, jarak &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; → index array&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Langkah waktu&amp;#039;&amp;#039;&amp;#039;: foto ke-&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, selisih &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; → iterasi loop&lt;br /&gt;
&lt;br /&gt;
Notasi &amp;lt;math&amp;gt;u_i^n&amp;lt;/math&amp;gt; = &amp;quot;nilai u di titik ke-i, pada langkah waktu ke-n&amp;quot; = &amp;lt;code&amp;gt;u[i]&amp;lt;/code&amp;gt; pada iterasi ke-n. Superscript n &amp;#039;&amp;#039;&amp;#039;bukan pangkat&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Mengganti turunan dengan pengurangan ===&lt;br /&gt;
&lt;br /&gt;
Dari definisi turunan, buang limit-nya (justifikasi formal: [[Deret Taylor]]):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Turunan !! Skema !! Aproksimasi !! Alasan pemilihan&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;\partial u/\partial t&amp;lt;/math&amp;gt; || Forward difference || &amp;lt;math&amp;gt;\dfrac{u_i^{n+1} - u_i^n}{\Delta t}&amp;lt;/math&amp;gt; || kita mau maju ke masa depan&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;\partial u/\partial x&amp;lt;/math&amp;gt; || Backward difference || &amp;lt;math&amp;gt;\dfrac{u_i^n - u_{i-1}^n}{\Delta x}&amp;lt;/math&amp;gt; || informasi datang dari kiri (hulu) → [[Skema Upwind]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Persamaan diskrit ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{u_i^{n+1}-u_i^n}{\Delta t} + c \frac{u_i^n - u_{i-1}^n}{\Delta x} = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Satu-satunya yang tidak diketahui: &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt; (masa depan). Pindah ruas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;u_i^{n+1} = u_i^n - c\frac{\Delta t}{\Delta x}\left(u_i^n - u_{i-1}^n\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Bahasa manusia:&amp;#039;&amp;#039;&amp;#039; nilai baru = nilai lama − koreksi berdasarkan selisih dengan tetangga kiri.&lt;br /&gt;
&lt;br /&gt;
== Paradigma: time-stepping / marching ==&lt;br /&gt;
&lt;br /&gt;
 state SEKARANG + ATURAN perubahan  →  state SEBENTAR LAGI&lt;br /&gt;
        ↑                                      |&lt;br /&gt;
        └────────────── ulangi ────────────────┘&lt;br /&gt;
&lt;br /&gt;
 frame 0 → frame 1 → frame 2 → frame 3 → ...&lt;br /&gt;
&lt;br /&gt;
Paradigma yang sama dipakai di prakiraan cuaca, orbit satelit, molecular dynamics, dan physics engine game. Yang berbeda cuma aturannya (PDE-nya) dan ukuran grid-nya.&lt;br /&gt;
&lt;br /&gt;
Peta lengkap dari fisika ke kode:&lt;br /&gt;
&lt;br /&gt;
 PDE (fisika)        = aturan alam&lt;br /&gt;
 Finite difference   = terjemahan aturan → aritmetika array&lt;br /&gt;
 Persamaan update    = resep: frame[n+1] = f(frame[n])&lt;br /&gt;
 Loop time-stepping  = jalankan resep berulang&lt;br /&gt;
 CFL                 = batas kecepatan biar tidak ngaco&lt;br /&gt;
&lt;br /&gt;
Skema ini tipe &amp;#039;&amp;#039;&amp;#039;explicit&amp;#039;&amp;#039;&amp;#039; (masa depan dihitung langsung dari masa kini). Alternatifnya [[Metode Implicit]] — lebih mahal per langkah, tapi bebas batas CFL; relevan buat [[HPC]] karena explicit = embarrassingly parallel / GPU-friendly.&lt;br /&gt;
&lt;br /&gt;
== Implementasi ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
nx = 81                    # jumlah titik grid&lt;br /&gt;
dx = 2 / (nx - 1)          # jarak antar titik&lt;br /&gt;
nt = 25                    # jumlah langkah waktu&lt;br /&gt;
dt = 0.02                  # ukuran langkah waktu (cek CFL!)&lt;br /&gt;
c  = 1.0                   # kecepatan gelombang&lt;br /&gt;
&lt;br /&gt;
# kondisi awal: fungsi topi (hat function)&lt;br /&gt;
u = np.ones(nx)&lt;br /&gt;
u[int(0.5/dx):int(1/dx + 1)] = 2&lt;br /&gt;
&lt;br /&gt;
for n in range(nt):&lt;br /&gt;
    un = u.copy()          # WAJIB: simpan state lama&lt;br /&gt;
    for i in range(1, nx):&lt;br /&gt;
        u[i] = un[i] - c * dt/dx * (un[i] - un[i-1])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Bug klasik pemula:&amp;#039;&amp;#039;&amp;#039; lupa &amp;lt;code&amp;gt;un = u.copy()&amp;lt;/code&amp;gt;. Semua titik harus di-update pakai nilai langkah n, bukan nilai yang setengah ter-update. Hasilnya sekilas mirip, tapi fisikanya salah.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Catatan gaya:&amp;#039;&amp;#039;&amp;#039; jangan langsung di-vectorize. Nested loop dulu biar fisikanya kelihatan; vectorize (&amp;lt;code&amp;gt;u[1:] = un[1:] - c*dt/dx*(un[1:] - un[:-1])&amp;lt;/code&amp;gt;) sebagai exercise terpisah + bahan benchmark loop vs vectorized vs numba.&lt;br /&gt;
&lt;br /&gt;
== Kondisi CFL (Courant–Friedrichs–Lewy) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\text{CFL} = \frac{c\,\Delta t}{\Delta x} \le 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! CFL !! Kondisi !! Perilaku&lt;br /&gt;
|-&lt;br /&gt;
| ≤ 1 || gelombang menempuh ≤ 1 sel grid per langkah waktu || stabil&lt;br /&gt;
|-&lt;br /&gt;
| &amp;gt; 1 || gelombang &amp;quot;menyalip&amp;quot; informasi grid || osilasi zigzag tumbuh eksponensial → meledak&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Intuisi: &amp;#039;&amp;#039;&amp;#039;informasi fisik tidak boleh lari lebih cepat daripada informasi numerik.&amp;#039;&amp;#039;&amp;#039; Stabilitas ditentukan kombinasi c, Δt, dan Δx — bukan Δt sendirian. Pembuktian formal: [[Analisis von Neumann]].&lt;br /&gt;
&lt;br /&gt;
== Numerical diffusion ==&lt;br /&gt;
&lt;br /&gt;
Fenomena: sudut-sudut tajam gelombang kotak makin lama makin &amp;#039;&amp;#039;&amp;#039;tumpul/melengkung&amp;#039;&amp;#039;&amp;#039;, padahal solusi eksak bentuknya tetap.&lt;br /&gt;
&lt;br /&gt;
* Ini &amp;#039;&amp;#039;&amp;#039;bukan bug&amp;#039;&amp;#039;&amp;#039; — efek samping error truncation dari skema backward difference orde-1&lt;br /&gt;
* Error-nya berperilaku seperti suku difusi (makanya disebut numerical &amp;#039;&amp;#039;diffusion&amp;#039;&amp;#039;)&lt;br /&gt;
* Trade-off akurasi vs stabilitas adalah tema besar di CFD; skema orde tinggi mengurangi ini tapi bawa masalah lain&lt;br /&gt;
* Detail: [[Numerical Diffusion]], [[Error Truncation]]&lt;br /&gt;
&lt;br /&gt;
== Kertas vs komputer ==&lt;br /&gt;
&lt;br /&gt;
Pembagian kerja di scientific computing:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Kerjaan komputer !! Kerjaan kertas (tidak bisa di-outsource)&lt;br /&gt;
|-&lt;br /&gt;
| menghitung solusi PDE (menjalankan resep) || menurunkan resep update dari Taylor series&lt;br /&gt;
|-&lt;br /&gt;
| menjalankan jutaan iterasi || analisis stabilitas (von Neumann → dari mana CFL ≤ 1)&lt;br /&gt;
|-&lt;br /&gt;
| || verifikasi kode via solusi eksak&lt;br /&gt;
|-&lt;br /&gt;
| || debugging fisika: &amp;quot;bug di kode, atau memang perilaku matematisnya?&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Analogi: kertas itu posisinya kayak assembly buat programmer Rust — bukan tempat produksi, tapi tempat memahami dan mendiagnosis. Porsi realistis: ~90% ngoding, ~10% coret-coretan, tapi 10% itu yang membedakan &amp;quot;bisa menjalankan notebook&amp;quot; dari &amp;quot;mengerti CFD&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Checklist penguasaan ==&lt;br /&gt;
&lt;br /&gt;
* [x] Paham arti fisik persamaan konveksi (aturan estafet)&lt;br /&gt;
* [x] Paham solusi eksak u₀(x − ct) dan fungsinya sebagai alat verifikasi&lt;br /&gt;
* [x] Paham notasi u_i^n (i = index ruang, n = index waktu)&lt;br /&gt;
* [x] Bisa menurunkan persamaan update dari persamaan diskrit&lt;br /&gt;
* [x] Paham intuisi CFL (gelombang vs kecepatan informasi grid)&lt;br /&gt;
* [x] Paham numerical diffusion itu bukan bug&lt;br /&gt;
* [ ] Implement Step 1 sendiri di NumPy (tanpa lihat notebook)&lt;br /&gt;
* [ ] Reproduce ledakan CFL di matplotlib (coba CFL = 1.1)&lt;br /&gt;
* [ ] Eksperimen: plot hasil pada CFL = 0.5 vs 0.9 vs 1.0 — bandingkan ketumpulan sudut&lt;br /&gt;
* [ ] Vectorize loop + benchmark vs nested loop&lt;br /&gt;
* [ ] Bonus: turunkan sendiri forward difference dari ekspansi Taylor&lt;br /&gt;
&lt;br /&gt;
== Lihat juga ==&lt;br /&gt;
&lt;br /&gt;
* [[Turunan Parsial]]&lt;br /&gt;
* [[Taylor Series]]&lt;br /&gt;
* [[Finite Difference]]&lt;br /&gt;
* [[Divergence dan Curl]]&lt;br /&gt;
* [[Skema Upwind]]&lt;br /&gt;
* [[Analisis von Neumann]]&lt;br /&gt;
* [[Step 2: Konveksi Nonlinear 1-D]]&lt;/div&gt;</summary>
		<author><name>SanzSkuy</name></author>
	</entry>
</feed>