{
  "aliases": null,
  "backlinks": null,
  "body": "\n## Statement\n\nLet $n, m \\ge 1$, let $A$ be a real $n \\times n$ matrix and let $B$ be a real $n \\times m$ matrix.\nConsider the linear [[control system|ZPDTVZQN5K]] $x' = A x + B u$ with control set $\\R^m$.\nThe system is [[controllable|A9WFM77Z4P]] if and only if the $n \\times nm$ matrix\n$$\\mathcal{C} = \\begin{pmatrix} B \u0026 AB \u0026 A^2 B \u0026 \\cdots \u0026 A^{n-1} B \\end{pmatrix}$$\nhas [[rank|0ZC9YTXZRY]] $n$.\nIn that case every state can be steered to every other state in any prescribed time $T \u003e 0$.\n\n## Remarks\n\nThe proof uses the controllability Gramian $W_T = \\int_0^T e^{-As} B B^T e^{-A^T s} \\, ds$, built from the [[matrix exponential|020M04FN1H]].\nA vector $v$ lies in the kernel of $W_T$ exactly when $v^T e^{-As} B = 0$ for all $s \\in [0, T]$, and by Taylor expansion and the [[Cayley–Hamilton theorem|0F765KFC2J]] this holds exactly when $v^T A^k B = 0$ for $k = 0, \\ldots, n - 1$.\nSo $W_T$ is invertible if and only if $\\rank \\mathcal{C} = n$.\nIf $W_T$ is invertible, the control $u(s) = B^T e^{-A^T s} W_T^{-1} (e^{-AT} x_1 - x_0)$ steers $x_0$ to $x_1$ in time $T$.\nIf $\\rank \\mathcal{C} \u003c n$, every trajectory from $0$ stays in the column space of $\\mathcal{C}$, so the states outside it are not reachable from $0$.\nExample: for the double integrator, $A = \\begin{pmatrix} 0 \u0026 1 \\\\ 0 \u0026 0 \\end{pmatrix}$ and $B = \\begin{pmatrix} 0 \\\\ 1 \\end{pmatrix}$ give $\\mathcal{C} = \\begin{pmatrix} 0 \u0026 1 \\\\ 1 \u0026 0 \\end{pmatrix}$, of rank $2$, so the system is controllable.\n\n## Explanations\n\n### L1 human\n\nThe control pushes the state in the directions of the columns of $B$.\nThe dynamics then turns these directions by $A$, then by $A$ again, and so on.\nThe test says that the system can be steered anywhere exactly when all these directions together span the whole state space.\nIt turns a question about all possible control functions into the rank of one matrix.\n\n### L2 human\n\nThe condition is purely algebraic and easy to check by hand or by computer.\nBy duality, the system $x' = A x$, $y = C x$ is [[observable|C4HN3EAQWM]] if and only if the matrix with block rows $C, CA, \\ldots, CA^{n-1}$ has rank $n$.\nThis is the Kalman condition for the pair $(A^T, C^T)$.\nWhen the condition fails, a linear change of coordinates splits the state into a controllable part and a part on which the control has no effect.\nControllability of $(A, B)$ is also equivalent to the possibility of placing the eigenvalues of $A + BK$ anywhere, symmetric under complex conjugation, by a choice of the feedback matrix $K$.\n",
  "commit": "547b6eddb8f2feb8d579f2d633d22a27b7e132fc",
  "front": {
    "about": [
      "A9WFM77Z4P"
    ],
    "kind": "statement",
    "msc": [
      "93B05",
      "93C05"
    ],
    "name": "Kalman rank condition",
    "role": "theorem",
    "sources": [
      {
        "url": "https://en.wikipedia.org/wiki/Controllability"
      }
    ],
    "tag": "9NSCZ2KBEB",
    "uses": [
      "ZPDTVZQN5K",
      "A9WFM77Z4P",
      "0ZC9YTXZRY",
      "020M04FN1H",
      "0F765KFC2J",
      "C4HN3EAQWM"
    ]
  },
  "kind": "statement",
  "link": "https://math2.tamnd.com/node/9NSCZ2KBEB/",
  "links": [
    {
      "field": "about",
      "target": "A9WFM77Z4P"
    },
    {
      "field": "uses",
      "target": "ZPDTVZQN5K"
    },
    {
      "field": "uses",
      "target": "A9WFM77Z4P"
    },
    {
      "field": "uses",
      "target": "0ZC9YTXZRY"
    },
    {
      "field": "uses",
      "target": "020M04FN1H"
    },
    {
      "field": "uses",
      "target": "0F765KFC2J"
    },
    {
      "field": "uses",
      "target": "C4HN3EAQWM"
    }
  ],
  "markdown": "https://math2.tamnd.com/node/9NSCZ2KBEB.md",
  "msc": [
    "93B05",
    "93C05"
  ],
  "name": "Kalman rank condition",
  "prov": null,
  "role": "theorem",
  "source": "https://github.com/tamnd/math2/blob/main/nodes/9NS/9NSCZ2KBEB.md",
  "status": null,
  "tag": "9NSCZ2KBEB",
  "uri": "m2://9NSCZ2KBEB",
  "url": "https://math2.tamnd.com/wiki/kalman-rank-condition/",
  "writing": {
    "tag": "9NSCZ2KBEB",
    "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
      }
    ]
  }
}
