{
  "aliases": null,
  "backlinks": null,
  "body": "\n## Statement\n\nLet $p$ be a polynomial of degree $n \\ge 1$ with [[complex|09FTAET5Z4]] coefficients.\nLet $\\Gamma$ be the circle $\\abs{z - c} = \\rho$, traversed once counterclockwise, with no [[root|019MA1VTR2]] of $p$ on it.\nLet $z_1, \\dots, z_k$ be the roots of $p$ inside $\\Gamma$, listed with multiplicity, and let $f(z) = \\prod_{j=1}^k (z - z_j)$.\n\n1. For every integer $m \\ge 0$, the [[power sum|0ZNXZB4HNB]] $s_m = z_1^m + \\cdots + z_k^m$ equals the [[contour integral|06ZGPYTWK8]]\n$$s_m = \\frac{1}{2\\pi i} \\oint_\\Gamma z^m \\, \\frac{p'(z)}{p(z)} \\, dz.$$\nIn particular $s_0 = k$.\n2. The coefficients of $f$ are determined by $s_1, \\dots, s_k$ through [[Newton's identities|0WG2A3HE0S]]. Moreover $p = f g$, where the roots of the polynomial $g$ are the roots of $p$ outside $\\Gamma$.\n\n## Remarks\n\nClause 1 follows from the [[residue theorem|032HKYS329]]: $p'/p = \\sum_j 1/(z - z_j)$ over all roots of $p$, and $z^m/(z - z_j)$ has residue $z_j^m$ at $z_j$ when $z_j$ lies inside $\\Gamma$, and no pole inside otherwise.\nFor $m = 0$ this is the [[argument principle|0PN2BXRS8G]].\nThe *splitting circle method* of Arnold Schönhage turns this into an algorithm.\nIt chooses a circle that splits the roots into two nonempty groups and stays well away from all roots, using estimates of the root moduli such as Graeffe squaring steps.\nIt approximates the integrals by the trapezoidal rule on the circle, which is computed with the fast Fourier transform.\nIt then refines the approximate factorization $p \\approx f g$ by a Newton iteration, and it recurses on $f$ and $g$ until all factors are linear.\nThe method was designed to bound the cost of computing all roots of a polynomial to a given precision, measured in bit operations.\n\n## Explanations\n\n### L1 human\n\nDraw a circle in the complex plane that has some roots of a polynomial inside and the rest outside.\nIntegrals around the circle count the roots inside and give the sums of their powers.\nFrom these sums one can rebuild the factor of the polynomial that holds exactly the roots inside, and then split again until every root stands alone.\n\n### L2 human\n\nThe method is a divide-and-conquer approach to the fundamental theorem of algebra made effective.\nIts main uses are in complexity theory and in high-precision software, rather than in everyday root finding.\nIt shows how complex analysis, through the residue theorem, gives concrete numerical algorithms.\n",
  "commit": "ff8a40749dc16545e3d2fc637f6b0196e81d0bfa",
  "front": {
    "about": [
      "019MA1VTR2"
    ],
    "kind": "statement",
    "msc": [
      "65H04",
      "65Y20"
    ],
    "name": "Splitting circle method",
    "role": "theorem",
    "same_as": {
      "wikidata": "Q1269645",
      "wikipedia": "Splitting circle method"
    },
    "sources": [
      {
        "url": "https://en.wikipedia.org/wiki/Splitting_circle_method"
      }
    ],
    "tag": "7680AP09J4",
    "uses": [
      "019MA1VTR2",
      "032HKYS329",
      "0PN2BXRS8G",
      "0WG2A3HE0S",
      "0ZNXZB4HNB",
      "06ZGPYTWK8",
      "09FTAET5Z4"
    ]
  },
  "kind": "statement",
  "link": "https://tamnd.github.io/math2/node/7680AP09J4/",
  "links": [
    {
      "field": "about",
      "target": "019MA1VTR2"
    },
    {
      "field": "uses",
      "target": "019MA1VTR2"
    },
    {
      "field": "uses",
      "target": "032HKYS329"
    },
    {
      "field": "uses",
      "target": "0PN2BXRS8G"
    },
    {
      "field": "uses",
      "target": "0WG2A3HE0S"
    },
    {
      "field": "uses",
      "target": "0ZNXZB4HNB"
    },
    {
      "field": "uses",
      "target": "06ZGPYTWK8"
    },
    {
      "field": "uses",
      "target": "09FTAET5Z4"
    }
  ],
  "markdown": "https://tamnd.github.io/math2/node/7680AP09J4.md",
  "msc": [
    "65H04",
    "65Y20"
  ],
  "name": "Splitting circle method",
  "prov": null,
  "role": "theorem",
  "source": "https://github.com/tamnd/math2/blob/main/nodes/768/7680AP09J4.md",
  "status": null,
  "tag": "7680AP09J4",
  "uri": "m2://7680AP09J4",
  "url": "https://tamnd.github.io/math2/wiki/splitting-circle-method/",
  "writing": {
    "tag": "7680AP09J4",
    "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
      }
    ]
  }
}
