{
  "aliases": null,
  "backlinks": null,
  "body": "\n## Statement\n\nLet $\\Delta x \u003e 0$ and $\\Delta t \u003e 0$.\nConsider a linear two-level [[finite difference|X7HYEBA5SA]] scheme on the grid $\\Delta x \\Z$:\n$$\\sum_{k=-K}^{K} b_k\\, u_{j+k}^{n+1} = \\sum_{k=-K}^{K} c_k\\, u_{j+k}^n, \\qquad j \\in \\Z,\\ n \\ge 0.$$\nThe unknown is scalar, and the complex coefficients $b_k$, $c_k$ do not depend on $j$ or $n$.\nAssume that $\\beta(\\xi) = \\sum_k b_k e^{i k \\xi}$ has no zero for $\\xi \\in [-\\pi, \\pi]$.\nThe amplification factor of the scheme is\n$$g(\\xi) = \\frac{\\sum_k c_k e^{i k \\xi}}{\\sum_k b_k e^{i k \\xi}}, \\qquad \\xi \\in [-\\pi, \\pi].$$\nThe coefficients may depend on $\\Delta t$ and $\\Delta x$ through a relation $\\Delta t = \\Lambda(\\Delta x)$ fixed in advance.\nUse the norm $\\norm{u}^2 = \\Delta x \\sum_j \\abs{u_j}^2$.\nThe scheme is called stable if for each $T \u003e 0$ there is $C_T$ with $\\norm{u^n} \\le C_T \\norm{u^0}$ whenever $n \\Delta t \\le T$.\nThe scheme is stable if and only if there are constants $K_0$ and $\\tau \u003e 0$ such that\n$$\\abs{g(\\xi)} \\le 1 + K_0 \\Delta t \\qquad \\text{for all } \\xi \\in [-\\pi, \\pi] \\text{ and all } 0 \u003c \\Delta t \\le \\tau.$$\nIf $g$ does not depend on $\\Delta t$, the condition is $\\abs{g(\\xi)} \\le 1$ for all $\\xi$.\n\n## Remarks\n\nThe proof uses the [[discrete-time Fourier transform|RXFJ47VYGX]] $\\hat u(\\xi) = \\Delta x \\sum_j u_j e^{-i j \\xi}$, which turns the scheme into $\\hat u^{n+1}(\\xi) = g(\\xi)\\, \\hat u^n(\\xi)$, so $\\hat u^n = g^n \\hat u^0$.\nBy Parseval's identity, $\\norm{u^n}$ equals the $L^2$ norm of $g^n \\hat u^0$ up to a constant factor, so stability is equivalent to a bound on $\\sup_\\xi \\abs{g(\\xi)}^n$ for $n \\Delta t \\le T$.\nThis bound holds exactly when $\\abs{g} \\le 1 + K_0 \\Delta t$, because $(1 + K_0 \\Delta t)^n \\le e^{K_0 T}$.\nExample: the [[upwind scheme|MTCRZC5QKT]] $u_j^{n+1} = u_j^n - \\nu (u_j^n - u_{j-1}^n)$ for $u_t + a u_x = 0$, with $\\nu = a \\Delta t / \\Delta x$, has $\\abs{g(\\xi)}^2 = 1 - 2 \\nu (1 - \\nu)(1 - \\cos \\xi)$; this is at most $1$ for all $\\xi$ exactly when $0 \\le \\nu \\le 1$, which is the [[Courant–Friedrichs–Lewy condition|FQVVNYV6N8]] for this scheme.\nFor systems of equations, the analogous condition on the spectral radius of the amplification matrix is necessary but not sufficient in general.\nFor variable coefficients or boundaries, the analysis is only a heuristic test.\n\n## Explanations\n\n### L1 human\n\nErrors in a computed solution can be written as a sum of waves of different frequencies.\nFor a linear scheme with constant coefficients, each wave is multiplied by a fixed factor at every time step.\nIf some factor has size larger than one, that wave grows exponentially and ruins the computation; if all factors have size at most one, nothing blows up.\nVon Neumann analysis computes these factors and checks this condition.\n\n### L2 human\n\nThe analysis is the practical tool to test a new difference scheme: substitute $u_j^n = g^n e^{i j \\xi}$ and solve for $g$.\nCombined with consistency, stability gives convergence by the [[Lax equivalence theorem|D5M7TRD3MY]].\nThe term $K_0 \\Delta t$ allows schemes for equations with lower-order terms, such as $u_t = u_{xx} + u$, whose exact solutions also grow.\n",
  "commit": "ff8a40749dc16545e3d2fc637f6b0196e81d0bfa",
  "front": {
    "about": [
      "X7HYEBA5SA"
    ],
    "kind": "statement",
    "msc": [
      "65M12",
      "65M06"
    ],
    "name": "von Neumann stability analysis",
    "role": "theorem",
    "sources": [
      {
        "url": "https://en.wikipedia.org/wiki/Von_Neumann_stability_analysis"
      }
    ],
    "tag": "2Z7NASDQB6",
    "uses": [
      "X7HYEBA5SA",
      "RXFJ47VYGX",
      "D5M7TRD3MY",
      "MTCRZC5QKT",
      "FQVVNYV6N8"
    ]
  },
  "kind": "statement",
  "link": "https://tamnd.github.io/math2/node/2Z7NASDQB6/",
  "links": [
    {
      "field": "about",
      "target": "X7HYEBA5SA"
    },
    {
      "field": "uses",
      "target": "X7HYEBA5SA"
    },
    {
      "field": "uses",
      "target": "RXFJ47VYGX"
    },
    {
      "field": "uses",
      "target": "D5M7TRD3MY"
    },
    {
      "field": "uses",
      "target": "MTCRZC5QKT"
    },
    {
      "field": "uses",
      "target": "FQVVNYV6N8"
    }
  ],
  "markdown": "https://tamnd.github.io/math2/node/2Z7NASDQB6.md",
  "msc": [
    "65M12",
    "65M06"
  ],
  "name": "von Neumann stability analysis",
  "prov": null,
  "role": "theorem",
  "source": "https://github.com/tamnd/math2/blob/main/nodes/2Z7/2Z7NASDQB6.md",
  "status": null,
  "tag": "2Z7NASDQB6",
  "uri": "m2://2Z7NASDQB6",
  "url": "https://tamnd.github.io/math2/wiki/von-neumann-stability-analysis/",
  "writing": {
    "tag": "2Z7NASDQB6",
    "kind": "statement",
    "level": "W0",
    "next": [
      {
        "what": "an inventory row",
        "note": "the row of the inventory that the node accounts for",
        "have": 0,
        "want": 1
      },
      {
        "what": "a source with a locator",
        "have": 0,
        "want": 1
      }
    ]
  }
}
