{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "c8b9b705",
   "metadata": {},
   "source": [
    "# Week 11: Persamaan Gelombang 1D\n",
    "\n",
    "Persamaan gelombang 1D memodelkan perambatan sinyal atau gelombang pada saluran transmisi tak merugi (lossless transmission line).\n",
    "\n",
    "$\\frac{\\partial^2 u}{\\partial t^2} = c^2 \\frac{\\partial^2 u}{\\partial x^2}$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d73cfb15",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from ipywidgets import interact, FloatSlider\n",
    "\n",
    "def simulasi_gelombang(c=1.0, t=0.0):\n",
    "    L = 10.0\n",
    "    nx = 200\n",
    "    x = np.linspace(0, L, nx)\n",
    "    \n",
    "    # Kondisi awal: pulsa Gauss\n",
    "    # Solusi d'Alembert: u(x,t) = 0.5 * [f(x-ct) + f(x+ct)]\n",
    "    def f(x):\n",
    "        return np.exp(-((x - L/2)**2) / 0.5)\n",
    "    \n",
    "    # Periodic boundary trick for simple visualization\n",
    "    x_minus = (x - c*t) % L\n",
    "    x_plus = (x + c*t) % L\n",
    "    \n",
    "    u = 0.5 * (f(x_minus) + f(x_plus))\n",
    "    \n",
    "    plt.figure(figsize=(8, 4))\n",
    "    plt.plot(x, u, 'b-', lw=2)\n",
    "    plt.ylim(-0.2, 1.2)\n",
    "    plt.xlim(0, L)\n",
    "    plt.xlabel('Posisi (x)')\n",
    "    plt.ylabel('Amplitudo (u)')\n",
    "    plt.title(rf\"Perambatan Gelombang 1D pada t = {t:.2f} (c = {c})\")\n",
    "    plt.grid(True)\n",
    "    plt.show()\n",
    "\n",
    "interact(simulasi_gelombang, \n",
    "         c=FloatSlider(value=1.0, min=0.1, max=5.0, step=0.1, description='Kecepatan (c)'),\n",
    "         t=FloatSlider(value=0.0, min=0.0, max=10.0, step=0.1, description='Waktu (t)'));"
   ]
  }
 ],
 "metadata": {},
 "nbformat": 4,
 "nbformat_minor": 5
}
