{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "81eedd15",
   "metadata": {},
   "source": [
    "# Notebook 01 — Errors, conditioning, and stability\n",
    "\n",
    "Companion to **Deck 01** of the 2026-27 Numerical Mathematics course.\n",
    "\n",
    "The notebook is deliberately experimental: change parameters, seeds, and tolerances. The goal is to see the difference between *backward* and *forward* error, and between an ill-conditioned problem and an unstable algorithm.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "6d3ce7b5",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-11-02T01:56:46.517869Z",
     "iopub.status.busy": "2026-11-02T01:56:46.517594Z",
     "iopub.status.idle": "2026-11-02T01:56:48.745700Z",
     "shell.execute_reply": "2026-11-02T01:56:48.741585Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy.integrate import quad\n",
    "from scipy.linalg import hilbert\n",
    "\n",
    "np.set_printoptions(precision=4, suppress=True)\n",
    "rng = np.random.default_rng(0)\n",
    "plt.rcParams.update({\"figure.figsize\": (7, 4), \"axes.grid\": True})\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2c51ea39",
   "metadata": {},
   "source": [
    "## 1. The floating-point contract\n",
    "\n",
    "The unit roundoff is $u=2^{-53}$ for IEEE double precision. Check the two basic inequalities:\n",
    "$$1+\\frac u2 = 1, \\qquad 1+u = 1 \\;\\text{(a tie)}, \\qquad 1+2u > 1.$$\n",
    "Also compare `np.spacing(x)` with the relative gap $u|x|$.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "6de4a3a5",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-11-02T01:56:48.749166Z",
     "iopub.status.busy": "2026-11-02T01:56:48.748847Z",
     "iopub.status.idle": "2026-11-02T01:56:48.755629Z",
     "shell.execute_reply": "2026-11-02T01:56:48.754694Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "u = 1.1102230246251565e-16\n",
      "1 + u/2 == 1: True\n",
      "1 + u   == 1: True  (tie rounds to even)\n",
      "1 + 2u  >  1: True\n",
      "relative gaps: [2.220e-16 2.220e-16 1.776e-16 1.490e-16]\n",
      "bound 2u: 2.220446049250313e-16\n"
     ]
    }
   ],
   "source": [
    "u = 2.0**-53\n",
    "print(\"u =\", u)\n",
    "print(\"1 + u/2 == 1:\", 1.0 + u/2 == 1.0)\n",
    "print(\"1 + u   == 1:\", 1.0 + u == 1.0, \" (tie rounds to even)\")\n",
    "print(\"1 + 2u  >  1:\", 1.0 + 2*u > 1.0)\n",
    "\n",
    "x = np.array([1.0, 2.0, 10.0, 1e8])\n",
    "gap = np.nextafter(x, np.inf) - x\n",
    "np.set_printoptions(precision=3, suppress=False)\n",
    "print(\"relative gaps:\", gap / x)\n",
    "print(\"bound 2u:\", 2*u)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2a0c52de",
   "metadata": {},
   "source": [
    "## 2. Catastrophic cancellation\n",
    "\n",
    "The two expressions\n",
    "$$\\sqrt{x^2+1}-1 \\quad\\text{and}\\quad \\frac{x^2}{\\sqrt{x^2+1}+1}$$\n",
    "are algebraically equal. The first loses all digits when $x$ is small because it subtracts nearly equal numbers.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "fcf302a9",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-11-02T01:56:48.762928Z",
     "iopub.status.busy": "2026-11-02T01:56:48.762407Z",
     "iopub.status.idle": "2026-11-02T01:56:50.123148Z",
     "shell.execute_reply": "2026-11-02T01:56:50.121823Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x=1e-04  naive=5.000e-09  stable=5.000e-09  rel.err=3.58e-09\n",
      "x=1e-05  naive=5.000e-11  stable=5.000e-11  rel.err=8.28e-08\n",
      "x=1e-06  naive=5.000e-13  stable=5.000e-13  rel.err=8.89e-05\n",
      "x=1e-07  naive=4.885e-15  stable=5.000e-15  rel.err=2.30e-02\n",
      "x=1e-08  naive=0.000e+00  stable=5.000e-17  rel.err=1.00e+00\n",
      "x=1e-09  naive=0.000e+00  stable=5.000e-19  rel.err=1.00e+00\n",
      "x=1e-10  naive=0.000e+00  stable=5.000e-21  rel.err=1.00e+00\n",
      "x=1e-11  naive=0.000e+00  stable=5.000e-23  rel.err=1.00e+00\n",
      "x=1e-12  naive=0.000e+00  stable=5.000e-25  rel.err=1.00e+00\n"
     ]
    },
    {
     "data": {
      "image/png": "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/nMtee3m5qYe9+7dO34b+TyPHDlSpVs+EwEBAWoIJVv22WefqfwtWLCgSrf+M59wWAgZZkSuffk+l+uhWrVquitXruhsWd68eVX+ylApsshj+ZwnJMNkyL1O8lqGPJLvA1u2Zs2aRNe4DPMjjxMO/yKfYfmOz549u0p3pUqVdAcOHNBZEwf5x9KBpK2SunEZHDEpqUZJOiyCdMmX0onkBnu1JfKr29DApQkH8NST0pjUhmiwBTKop6FZEqRnWtJZOh4/fqyuDale1TdwtwcytI0MfZKUpDNp7zr9UDLymq2TISCSNlqXEuWkPVKlhELSLVXrtj6lkJQyGRr0VT7Lhq5pe/mcS49EGaw8KWkGIp0wEpKmMVIqYw9zn0opU9JQQEpbk6bZnvI6NplrXKqHDVURW2u6GcQRERER2SD7baBEREREZMcYxBERERHZIAZxRERERDaIQRwRERGRDWIQR0RERGSDGMQRERER2SAGcUREREQ2iEEcERERkQ1iEEdERERkgxjEERGZyLVr1/D777+rqekSTtfzxx9/4OLFizzPRGRSnHaLiMhEJHirWrUq6tevj7lz56p1I0aMUEHciRMn4O3tzXNNRCbDII6IyISOHTuGmjVrqsAte/bsaNGiBbZs2YIGDRrwPBORSTmbdndERNpWuXJlTJo0CT179oSbmxuGDx/OAI6IzIIlcUREJibt4Hx9fREXF4c7d+6oYI6IyNTYsYGIyMS++OILuLi4qMfTp0/n+SUis2BJHBGRCR04cEB1bFizZg2ePHmCrl274p9//kHFihV5nonIpBjEERGZSHh4OCpVqoRWrVph6tSpal2PHj1UEHfkyBG4u7vzXBORybA6lYjIRDZu3IhGjRph8uTJ8eukOjUwMFD1UCUiMiWWxBERERHZIJbEEREREdkgBnFERERENohBHBEREZENYhBHREREZIMYxBERERHZIAZxRERERDaIQRwRERGRDWIQR0RERGSDGMQRERER2SAGcUREREQ2iEEcERERkQ1iEEdEREQE2/N/2ExFuS9IFUMAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 700x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.logspace(-4, -12, 9)\n",
    "naive = np.sqrt(x*x + 1.0) - 1.0\n",
    "stable = x*x / (np.sqrt(x*x + 1.0) + 1.0)\n",
    "rel = np.abs(naive - stable) / np.abs(stable)\n",
    "\n",
    "for xi, ni, si, ri in zip(x, naive, stable, rel):\n",
    "    print(f\"x={xi:.0e}  naive={ni:.3e}  stable={si:.3e}  rel.err={ri:.2e}\")\n",
    "\n",
    "plt.loglog(x, rel, \"o-\")\n",
    "plt.xlabel(\"x\")\n",
    "plt.ylabel(\"relative error of naive formula\")\n",
    "plt.title(\"Cancellation in sqrt(x^2+1)-1\")\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b3481646",
   "metadata": {},
   "source": [
    "## 3. The quadratic formula\n",
    "\n",
    "For $x^2-56x+1=0$, the root of smaller modulus is computed by subtracting nearly equal numbers. The paired formula $x_1x_2=c/a$ recovers it accurately.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "6d620641",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-11-02T01:56:50.128991Z",
     "iopub.status.busy": "2026-11-02T01:56:50.127691Z",
     "iopub.status.idle": "2026-11-02T01:56:50.139206Z",
     "shell.execute_reply": "2026-11-02T01:56:50.138226Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x_big          = 55.98213715926644\n",
      "small, naive   = 0.018  (five-digit arithmetic)\n",
      "small, stable  = 0.017862840733554864\n",
      "reference      = 0.017862840733554864\n",
      "relative error naive : 0.007678468866795896\n",
      "relative error stable: 0.0\n"
     ]
    }
   ],
   "source": [
    "from decimal import Decimal, getcontext\n",
    "getcontext().prec = 50\n",
    "\n",
    "def round_sig(x, p=5):\n",
    "    return float(f\"{x:.{p}g}\")\n",
    "\n",
    "a, b, c = 1.0, -56.0, 1.0\n",
    "disc = b*b - 4*a*c\n",
    "x_big = (-b + np.sqrt(disc)) / (2*a)\n",
    "sqrt_disc_5 = round_sig(np.sqrt(disc), 5)\n",
    "x_small_naive = round_sig((-b - sqrt_disc_5) / (2*a), 5)\n",
    "x_small_stable = c / (a*x_big)\n",
    "\n",
    "exact_small = float((Decimal(56) - Decimal(3132).sqrt()) / 2)\n",
    "print(\"x_big          =\", x_big)\n",
    "print(\"small, naive   =\", x_small_naive, \" (five-digit arithmetic)\")\n",
    "print(\"small, stable  =\", x_small_stable)\n",
    "print(\"reference      =\", exact_small)\n",
    "print(\"relative error naive :\", abs(x_small_naive-exact_small)/abs(exact_small))\n",
    "print(\"relative error stable:\", abs(x_small_stable-exact_small)/abs(exact_small))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "953d11bb",
   "metadata": {},
   "source": [
    "## 4. Miller's recurrence: an ill-conditioned direction\n",
    "\n",
    "Define\n",
    "$$I_n=\\int_0^1 \\frac{x^n}{x+10}\\,dx, \\qquad I_n+10I_{n-1}=\\frac1n.$$\n",
    "The forward recursion multiplies an initial error by $-10$ at every step. The backward recursion divides by $-10$ and is stable.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "a0a38f01",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-11-02T01:56:50.144052Z",
     "iopub.status.busy": "2026-11-02T01:56:50.142027Z",
     "iopub.status.idle": "2026-11-02T01:56:50.552299Z",
     "shell.execute_reply": "2026-11-02T01:56:50.550813Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 700x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "n_max = 30\n",
    "I_exact = np.array([quad(lambda x, n=n: x**n/(x+10), 0, 1)[0] for n in range(n_max+1)])\n",
    "\n",
    "I_fwd = np.zeros(n_max+1)\n",
    "I_fwd[0] = I_exact[0]\n",
    "for n in range(1, n_max+1):\n",
    "    I_fwd[n] = 1.0/n - 10.0*I_fwd[n-1]\n",
    "\n",
    "N = 60\n",
    "I_bwd = np.zeros(N+1)\n",
    "for n in range(N, 0, -1):\n",
    "    I_bwd[n-1] = (1.0/n - I_bwd[n]) / 10.0\n",
    "\n",
    "plt.semilogy(range(n_max+1), np.abs(I_fwd-I_exact), \"o-\", label=\"forward\")\n",
    "plt.semilogy(range(n_max+1), np.abs(I_bwd[:n_max+1]-I_exact), \"s-\", label=\"backward\")\n",
    "plt.xlabel(\"n\")\n",
    "plt.ylabel(\"absolute error\")\n",
    "plt.title(\"Miller recurrence: forward vs backward\")\n",
    "plt.legend()\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2398a3ce",
   "metadata": {},
   "source": [
    "## 5. Conditioning versus stability\n",
    "\n",
    "A tiny residual does **not** imply a tiny error. The Hilbert matrix is a standard example: the residual can be small while the forward error is large.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "b7190b81",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-11-02T01:56:50.554974Z",
     "iopub.status.busy": "2026-11-02T01:56:50.554764Z",
     "iopub.status.idle": "2026-11-02T01:56:50.570688Z",
     "shell.execute_reply": "2026-11-02T01:56:50.569882Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n= 6  cond= 1.50e+07  rel.res= 4.48e-17  rel.err= 3.72e-11\n",
      "n= 8  cond= 1.53e+10  rel.res= 5.99e-17  rel.err= 3.91e-08\n",
      "n=10  cond= 1.60e+13  rel.res= 2.36e-17  rel.err= 2.02e-04\n",
      "n=12  cond= 1.64e+16  rel.res= 5.21e-17  rel.err= 2.73e-01\n"
     ]
    }
   ],
   "source": [
    "for n in [6, 8, 10, 12]:\n",
    "    H = hilbert(n)\n",
    "    x_true = np.ones(n)\n",
    "    b = H @ x_true\n",
    "    x_hat = np.linalg.solve(H, b)\n",
    "    r = b - H @ x_hat\n",
    "    rel_res = np.linalg.norm(r) / np.linalg.norm(b)\n",
    "    rel_err = np.linalg.norm(x_hat - x_true) / np.linalg.norm(x_true)\n",
    "    print(f\"n={n:2d}  cond={np.linalg.cond(H):9.2e}  rel.res={rel_res:9.2e}  rel.err={rel_err:9.2e}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2f0e2940",
   "metadata": {},
   "source": [
    "## 6. A perturbation bound in action\n",
    "\n",
    "For $A x=b$ and a perturbed right-hand side, the relative error is bounded by\n",
    "$$\\frac{\\|\\Delta x\\|}{\\|x\\|}\\lesssim \\kappa(A)\\,\\frac{\\|\\Delta b\\|}{\\|b\\|}.$$\n",
    "Try a well-conditioned and an ill-conditioned matrix and compare the observed slope with the bound.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "e861aaf1",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-11-02T01:56:50.573409Z",
     "iopub.status.busy": "2026-11-02T01:56:50.573190Z",
     "iopub.status.idle": "2026-11-02T01:56:50.585513Z",
     "shell.execute_reply": "2026-11-02T01:56:50.584482Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "well-conditioned: cond=2.00e+00\n",
      "  ||db||/||b||=1e-12  observed=1.27e-12  bound=2.00e-12\n",
      "  ||db||/||b||=1e-10  observed=8.21e-11  bound=2.00e-10\n",
      "  ||db||/||b||=1e-08  observed=1.10e-08  bound=2.00e-08\n",
      "  ||db||/||b||=1e-06  observed=1.13e-06  bound=2.00e-06\n",
      "\n",
      "ill-conditioned: cond=4.00e+08\n",
      "  ||db||/||b||=1e-12  observed=1.10e-04  bound=4.00e-04\n",
      "  ||db||/||b||=1e-10  observed=3.01e-02  bound=4.00e-02\n",
      "  ||db||/||b||=1e-08  observed=2.55e+00  bound=4.00e+00\n",
      "  ||db||/||b||=1e-06  observed=1.01e+02  bound=4.00e+02\n"
     ]
    }
   ],
   "source": [
    "eps = 1e-8\n",
    "A_good = np.array([[2.0, 0.0], [0.0, 1.0]])\n",
    "A_bad  = np.array([[1.0, 1.0], [1.0, 1.0+eps]])\n",
    "x_true = np.array([1.0, 1.0])\n",
    "\n",
    "for name, A in [(\"well-conditioned\", A_good), (\"ill-conditioned\", A_bad)]:\n",
    "    b = A @ x_true\n",
    "    kappa = np.linalg.cond(A)\n",
    "    print(f\"\\n{name}: cond={kappa:.2e}\")\n",
    "    for delta in [1e-12, 1e-10, 1e-8, 1e-6]:\n",
    "        db = delta*np.linalg.norm(b)*rng.standard_normal(2)\n",
    "        db *= delta*np.linalg.norm(b)/np.linalg.norm(db)\n",
    "        x_pert = np.linalg.solve(A, b+db)\n",
    "        observed = np.linalg.norm(x_pert-x_true)/np.linalg.norm(x_true)\n",
    "        bound = kappa*np.linalg.norm(db)/np.linalg.norm(b)\n",
    "        print(f\"  ||db||/||b||={delta:.0e}  observed={observed:.2e}  bound={bound:.2e}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "81b40286",
   "metadata": {},
   "source": [
    "## Exercises\n",
    "\n",
    "1. Repeat the cancellation experiment with `exp(x)-1` and its stable form using `expm1`.\n",
    "2. For the quadratic formula, find a case where the naive formula loses *both* roots and explain why.\n",
    "3. Change the starting index in Miller's backward recursion. How small must $N$ be before the error contaminates $I_0$?\n",
    "4. Construct a $3\\times3$ matrix with a large condition number but a small residual for a random right-hand side. How large can the forward error become?\n",
    "5. Derive the perturbation bound used in Section 6 and check whether the observed error can exceed it in floating point.\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".venv (3.14.7)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.14.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
