{
  "aliases": null,
  "backlinks": null,
  "body": "\n## Statement\n\nLet $f \\colon \\R \\times \\R^d \\to \\R^d$ be infinitely differentiable, and consider the [[initial value problem|0FXDW992DS]] $y' = f(t, y)$, $y(t_0) = y_0$.\nFix a step $H \u003e 0$, an even integer $n$, and put $h = H / n$.\nGragg's modified midpoint rule computes\n$$z_0 = y_0, \\qquad z_1 = z_0 + h f(t_0, z_0), \\qquad z_{m+1} = z_{m-1} + 2 h f(t_0 + m h, z_m) \\quad (1 \\le m \\le n - 1),$$\nand sets $S(h) = z_n$.\nThen $S(h)$ has an asymptotic expansion in even powers of $h$:\n$$y(t_0 + H) - S(h) = e_1 h^2 + e_2 h^4 + \\cdots + e_k h^{2k} + O(h^{2k+2})$$\nfor each $k \\ge 1$, where the vectors $e_j$ do not depend on $h$.\n\nThe Bulirsch–Stoer algorithm computes $S(h_i)$ for $h_i = H / n_i$ with increasing even integers $n_1 \u003c n_2 \u003c \\cdots$.\nIt extrapolates the values $T_{i,1} = S(h_i)$ to $h = 0$ by polynomial (or rational) extrapolation in $h^2$.\nWith polynomial extrapolation, the entry $T_{j,k}$ of the extrapolation table is a one-step method of order $2k$ in $H$.\n\n## Remarks\n\nThe expansion in $h^2$ is due to Gragg, and it comes from the symmetry of the two-step midpoint rule.\nFor general $n$ the expansion of $z_n$ also contains terms with the factor $(-1)^n$.\nTaking $n$ even makes these factors equal to $1$, so the coefficients $e_j$ are the same for all the $h_i$.\n[[Richardson extrapolation|WMTZG71K2Y]] in the variable $h^2$ then removes one even power of $h$ in each column of the table.\nFor example, with $n_1 = 2$ and $n_2 = 4$, the value $T_{2,2} = S(h_2) + \\frac{S(h_2) - S(h_1)}{(n_2/n_1)^2 - 1} = \\frac{4 S(h_2) - S(h_1)}{3}$ has local error $O(H^5)$, so it is a method of order $4$.\nBulirsch and Stoer used rational extrapolation, and Gragg also proposed a final smoothing step; the order statement is the same.\n\n## Explanations\n\n### L1 human\n\nThe method takes one big step several times, each time cut into a different number of small midpoint steps.\nThe answers get better as the small steps shrink, and the way they improve is very regular.\nOne fits a curve through the answers and reads off its value at step size zero.\nThis gives very accurate results for smooth problems at a modest cost.\n\n### L2 human\n\nThe algorithm is an extrapolation method: the order is raised by adding rows to the table, not by changing the base method.\nThe difference between the last two diagonal entries of the table estimates the error.\nThis estimate drives the choice of $H$ and of the number of rows, as in [[adaptive step size|6MREWBZR7R]] control.\nIt works best for smooth, non-stiff problems with tight tolerances; for stiff problems one uses an extrapolated linearly implicit method instead.\n",
  "commit": "ff8a40749dc16545e3d2fc637f6b0196e81d0bfa",
  "front": {
    "about": [
      "WMTZG71K2Y"
    ],
    "kind": "statement",
    "msc": [
      "65L06",
      "65L05"
    ],
    "name": "Bulirsch–Stoer algorithm",
    "role": "theorem",
    "sources": [
      {
        "url": "https://en.wikipedia.org/wiki/Bulirsch%E2%80%93Stoer_algorithm"
      }
    ],
    "tag": "2PJECK6ZGW",
    "uses": [
      "0FXDW992DS",
      "WMTZG71K2Y"
    ]
  },
  "kind": "statement",
  "link": "https://tamnd.github.io/math2/node/2PJECK6ZGW/",
  "links": [
    {
      "field": "about",
      "target": "WMTZG71K2Y"
    },
    {
      "field": "uses",
      "target": "0FXDW992DS"
    },
    {
      "field": "uses",
      "target": "WMTZG71K2Y"
    }
  ],
  "markdown": "https://tamnd.github.io/math2/node/2PJECK6ZGW.md",
  "msc": [
    "65L06",
    "65L05"
  ],
  "name": "Bulirsch–Stoer algorithm",
  "prov": null,
  "role": "theorem",
  "source": "https://github.com/tamnd/math2/blob/main/nodes/2PJ/2PJECK6ZGW.md",
  "status": null,
  "tag": "2PJECK6ZGW",
  "uri": "m2://2PJECK6ZGW",
  "url": "https://tamnd.github.io/math2/wiki/bulirsch-stoer-algorithm/",
  "writing": {
    "tag": "2PJECK6ZGW",
    "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
      }
    ]
  }
}
