{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "9f95ea7a",
   "metadata": {},
   "source": [
    "# Week 13: Persamaan Laplace 2D\n",
    "\n",
    "Persamaan Laplace memodelkan distribusi potensial listrik pada area bebas muatan.\n",
    "\n",
    "$\\nabla^2 V = \\frac{\\partial^2 V}{\\partial x^2} + \\frac{\\partial^2 V}{\\partial y^2} = 0$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9886f051",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from ipywidgets import interact, IntSlider\n",
    "\n",
    "def simulasi_laplace(iterasi=100):\n",
    "    nx, ny = 30, 30\n",
    "    V = np.zeros((ny, nx))\n",
    "    \n",
    "    # Syarat batas\n",
    "    V[0, :] = 100.0  # Atas\n",
    "    V[-1, :] = 0.0   # Bawah\n",
    "    V[:, 0] = 0.0    # Kiri\n",
    "    V[:, -1] = 0.0   # Kanan\n",
    "    \n",
    "    # Iterasi Jacobi\n",
    "    for _ in range(iterasi):\n",
    "        V_baru = np.copy(V)\n",
    "        for i in range(1, ny-1):\n",
    "            for j in range(1, nx-1):\n",
    "                V_baru[i, j] = 0.25 * (V[i+1, j] + V[i-1, j] + V[i, j+1] + V[i, j-1])\n",
    "        V = np.copy(V_baru)\n",
    "        \n",
    "    plt.figure(figsize=(6, 5))\n",
    "    cp = plt.contourf(V, 20, cmap='inferno')\n",
    "    plt.colorbar(cp, label='Potensial (V)')\n",
    "    plt.title(rf\"Distribusi Potensial Laplace (Iterasi: {iterasi})\")\n",
    "    plt.xlabel('x')\n",
    "    plt.ylabel('y')\n",
    "    plt.show()\n",
    "\n",
    "interact(simulasi_laplace, \n",
    "         iterasi=IntSlider(value=10, min=0, max=500, step=10, description='Iterasi'));"
   ]
  }
 ],
 "metadata": {},
 "nbformat": 4,
 "nbformat_minor": 5
}
