{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Example 3: Minimum Frobenius Norm Static Output Feedback"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The example system has been taken from \\[1, Example 3\\]. The eigenvalue placement with minimum Frobenium norm is discussed in \\[2, 3\\]. The poles should be placed at $-3,-4,-5,-2\\pm2j$, i.e., we want to have a conjugate complex pair.\n",
    "\n",
    "1. Lee, T. H.,; Wang, Q. G.; Koh, E. K. (1994). *An iterative algorithm for pole placement by output feedback*. IEEE Transactions on Automatic Control, 39(3), 565-568.\n",
    "2. Röbenack, K.: Voßwinkell, R.: Franke, M. (2018). *On the eigenvalue placement by static output feedback via quantifier elimination*. In 26th Mediterranean Conference on Control and Automation (MED), pp. 133-138. DOI: <https://doi.org/10.1109/MED.2018.8442817>\n",
    "3. Röbenack, K.; Gerbet, D.: *Minimum Norm Partial Eigenvalue Placement for Static Output Feedback Control*.\n",
    "[International Conference on System Theory, Control and Computing (ICSTCC)](https://icstcc2021.ac.tuiasi.ro/),   \n",
    "October 20-23, 2021, Iași, Romania"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Polynomial ring"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><script type=\"math/tex; mode=display\">\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\Bold{Q}[k_{11}, k_{12}, k_{21}, k_{22}, k_{31}, k_{32}, s, l_{0}, l_{1}, l_{2}, l_{3}, l_{4}, l_{5}, q]</script></html>"
      ],
      "text/latex": [
       "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\Bold{Q}[k_{11}, k_{12}, k_{21}, k_{22}, k_{31}, k_{32}, s, l_{0}, l_{1}, l_{2}, l_{3}, l_{4}, l_{5}, q]$$"
      ],
      "text/plain": [
       "Multivariate Polynomial Ring in k11, k12, k21, k22, k31, k32, s, l0, l1, l2, l3, l4, l5, q over Rational Field"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%display latex\n",
    "R.<k11,k12,k21,k22,k31,k32,s,l0,l1,l2,l3,l4,l5,q> = PolynomialRing(QQ, order='lex')\n",
    "R"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "State space system"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><script type=\"math/tex; mode=display\">\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(\\left(\\begin{array}{rrrrr}\n",
       "0 & 1 & 0 & 0 & 0 \\\\\n",
       "0 & 0 & 1 & 0 & 0 \\\\\n",
       "0 & 0 & 0 & 1 & 0 \\\\\n",
       "0 & 0 & 0 & 0 & 1 \\\\\n",
       "0 & 0 & 0 & 0 & 0\n",
       "\\end{array}\\right), \\left(\\begin{array}{rrr}\n",
       "1 & 0 & 0 \\\\\n",
       "1 & 0 & 0 \\\\\n",
       "0 & 1 & 0 \\\\\n",
       "0 & 1 & 0 \\\\\n",
       "0 & 0 & 1\n",
       "\\end{array}\\right), \\left(\\begin{array}{rrrrr}\n",
       "1 & 0 & 0 & 0 & 0 \\\\\n",
       "0 & 1 & 0 & 0 & 0\n",
       "\\end{array}\\right)\\right)</script></html>"
      ],
      "text/latex": [
       "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(\\left(\\begin{array}{rrrrr}\n",
       "0 & 1 & 0 & 0 & 0 \\\\\n",
       "0 & 0 & 1 & 0 & 0 \\\\\n",
       "0 & 0 & 0 & 1 & 0 \\\\\n",
       "0 & 0 & 0 & 0 & 1 \\\\\n",
       "0 & 0 & 0 & 0 & 0\n",
       "\\end{array}\\right), \\left(\\begin{array}{rrr}\n",
       "1 & 0 & 0 \\\\\n",
       "1 & 0 & 0 \\\\\n",
       "0 & 1 & 0 \\\\\n",
       "0 & 1 & 0 \\\\\n",
       "0 & 0 & 1\n",
       "\\end{array}\\right), \\left(\\begin{array}{rrrrr}\n",
       "1 & 0 & 0 & 0 & 0 \\\\\n",
       "0 & 1 & 0 & 0 & 0\n",
       "\\end{array}\\right)\\right)$$"
      ],
      "text/plain": [
       "(\n",
       "[0 1 0 0 0]  [1 0 0]             \n",
       "[0 0 1 0 0]  [1 0 0]             \n",
       "[0 0 0 1 0]  [0 1 0]             \n",
       "[0 0 0 0 1]  [0 1 0]  [1 0 0 0 0]\n",
       "[0 0 0 0 0], [0 0 1], [0 1 0 0 0]\n",
       ")"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = matrix(R,[[0,1,0,0,0],\n",
    "        [0,0,1,0,0],\n",
    "        [0,0,0,1,0],\n",
    "        [0,0,0,0,1],\n",
    "        [0,0,0,0,0]])\n",
    "B = matrix(R,[[1,0,0],[1,0,0],[0,1,0],[0,1,0],[0,0,1]])\n",
    "C = matrix(R,[[1,0,0,0,0],[0,1,0,0,0]])\n",
    "(A,B,C)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Symbolic feedback matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><script type=\"math/tex; mode=display\">\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(\\begin{array}{rr}\n",
       "k_{11} & k_{12} \\\\\n",
       "k_{21} & k_{22} \\\\\n",
       "k_{31} & k_{32}\n",
       "\\end{array}\\right)</script></html>"
      ],
      "text/latex": [
       "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(\\begin{array}{rr}\n",
       "k_{11} & k_{12} \\\\\n",
       "k_{21} & k_{22} \\\\\n",
       "k_{31} & k_{32}\n",
       "\\end{array}\\right)$$"
      ],
      "text/plain": [
       "[k11 k12]\n",
       "[k21 k22]\n",
       "[k31 k32]"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "K = matrix(R,[[k11,k12],[k21,k22],[k31,k32]])\n",
    "K"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Closed-loop characteristic polynomial"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><script type=\"math/tex; mode=display\">\\newcommand{\\Bold}[1]{\\mathbf{#1}}k_{11} s^{4} + k_{12} s^{4} + s^{5} - k_{12} k_{21} s^{2} + k_{11} k_{22} s^{2} + k_{11} s^{3} + k_{22} s^{3} - k_{12} k_{21} s + k_{11} k_{22} s + k_{21} s^{2} + k_{22} s^{2} - k_{12} k_{31} + k_{11} k_{32} + k_{21} s + k_{32} s + k_{31}</script></html>"
      ],
      "text/latex": [
       "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}k_{11} s^{4} + k_{12} s^{4} + s^{5} - k_{12} k_{21} s^{2} + k_{11} k_{22} s^{2} + k_{11} s^{3} + k_{22} s^{3} - k_{12} k_{21} s + k_{11} k_{22} s + k_{21} s^{2} + k_{22} s^{2} - k_{12} k_{31} + k_{11} k_{32} + k_{21} s + k_{32} s + k_{31}$$"
      ],
      "text/plain": [
       "k11*s^4 + k12*s^4 + s^5 - k12*k21*s^2 + k11*k22*s^2 + k11*s^3 + k22*s^3 - k12*k21*s + k11*k22*s + k21*s^2 + k22*s^2 - k12*k31 + k11*k32 + k21*s + k32*s + k31"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "CP = det(s*matrix.identity(5)-(A-B*K*C))\n",
    "CP"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Remainders of polynomial division for an eigenvalue placement at $-3,-4,-5,-2\\pm2j$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "q1,r1 = CP.quo_rem(s+5)\n",
    "q2,r2 = q1.quo_rem(s+4)\n",
    "q3,r3 = q2.quo_rem(s+3)\n",
    "q4,r4 = q3.quo_rem(s^2 + 4*s + 8)\n",
    "r4a = r4.coefficient({s:0})\n",
    "r4b = r4.coefficient({s:1})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Lagrangian function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><script type=\"math/tex; mode=display\">\\newcommand{\\Bold}[1]{\\mathbf{#1}}k_{11}^{2} l_{0} + 20 k_{11} k_{22} l_{1} - 8 k_{11} k_{22} l_{2} + k_{11} k_{22} l_{3} + k_{11} k_{32} l_{1} + 500 k_{11} l_{1} - 308 k_{11} l_{2} + 85 k_{11} l_{3} - 11 k_{11} l_{4} + k_{11} l_{5} + k_{12}^{2} l_{0} - 20 k_{12} k_{21} l_{1} + 8 k_{12} k_{21} l_{2} - k_{12} k_{21} l_{3} - k_{12} k_{31} l_{1} + 625 k_{12} l_{1} - 369 k_{12} l_{2} + 97 k_{12} l_{3} - 12 k_{12} l_{4} + k_{12} l_{5} + k_{21}^{2} l_{0} + 20 k_{21} l_{1} - 8 k_{21} l_{2} + k_{21} l_{3} + k_{22}^{2} l_{0} - 100 k_{22} l_{1} + 52 k_{22} l_{2} - 11 k_{22} l_{3} + k_{22} l_{4} + k_{31}^{2} l_{0} + k_{31} l_{1} + k_{32}^{2} l_{0} - 5 k_{32} l_{1} + k_{32} l_{2} - l_{0} q - 3125 l_{1} + 2101 l_{2} - 660 l_{3} + 89 l_{4} - 16 l_{5} + q</script></html>"
      ],
      "text/latex": [
       "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}k_{11}^{2} l_{0} + 20 k_{11} k_{22} l_{1} - 8 k_{11} k_{22} l_{2} + k_{11} k_{22} l_{3} + k_{11} k_{32} l_{1} + 500 k_{11} l_{1} - 308 k_{11} l_{2} + 85 k_{11} l_{3} - 11 k_{11} l_{4} + k_{11} l_{5} + k_{12}^{2} l_{0} - 20 k_{12} k_{21} l_{1} + 8 k_{12} k_{21} l_{2} - k_{12} k_{21} l_{3} - k_{12} k_{31} l_{1} + 625 k_{12} l_{1} - 369 k_{12} l_{2} + 97 k_{12} l_{3} - 12 k_{12} l_{4} + k_{12} l_{5} + k_{21}^{2} l_{0} + 20 k_{21} l_{1} - 8 k_{21} l_{2} + k_{21} l_{3} + k_{22}^{2} l_{0} - 100 k_{22} l_{1} + 52 k_{22} l_{2} - 11 k_{22} l_{3} + k_{22} l_{4} + k_{31}^{2} l_{0} + k_{31} l_{1} + k_{32}^{2} l_{0} - 5 k_{32} l_{1} + k_{32} l_{2} - l_{0} q - 3125 l_{1} + 2101 l_{2} - 660 l_{3} + 89 l_{4} - 16 l_{5} + q$$"
      ],
      "text/plain": [
       "k11^2*l0 + 20*k11*k22*l1 - 8*k11*k22*l2 + k11*k22*l3 + k11*k32*l1 + 500*k11*l1 - 308*k11*l2 + 85*k11*l3 - 11*k11*l4 + k11*l5 + k12^2*l0 - 20*k12*k21*l1 + 8*k12*k21*l2 - k12*k21*l3 - k12*k31*l1 + 625*k12*l1 - 369*k12*l2 + 97*k12*l3 - 12*k12*l4 + k12*l5 + k21^2*l0 + 20*k21*l1 - 8*k21*l2 + k21*l3 + k22^2*l0 - 100*k22*l1 + 52*k22*l2 - 11*k22*l3 + k22*l4 + k31^2*l0 + k31*l1 + k32^2*l0 - 5*k32*l1 + k32*l2 - l0*q - 3125*l1 + 2101*l2 - 660*l3 + 89*l4 - 16*l5 + q"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L = q + l0*(k11^2+k12^2+k21^2+k22^2+k31^2+k32^2-q) + l1*r1 + l2*r2 + l3*r3 + l4*r4a + l5*r4b\n",
    "L"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Neccessary optimility condition and associated polynomial ideal"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0  :  k11  :  2*k11*l0 + 20*k22*l1 - 8*k22*l2 + k22*l3 + k32*l1 + 500*l1 - 308*l2 + 85*l3 - 11*l4 + l5\n",
      "1  :  k12  :  2*k12*l0 - 20*k21*l1 + 8*k21*l2 - k21*l3 - k31*l1 + 625*l1 - 369*l2 + 97*l3 - 12*l4 + l5\n",
      "2  :  k21  :  -20*k12*l1 + 8*k12*l2 - k12*l3 + 2*k21*l0 + 20*l1 - 8*l2 + l3\n",
      "3  :  k22  :  20*k11*l1 - 8*k11*l2 + k11*l3 + 2*k22*l0 - 100*l1 + 52*l2 - 11*l3 + l4\n",
      "4  :  k31  :  -k12*l1 + 2*k31*l0 + l1\n",
      "5  :  k32  :  k11*l1 + 2*k32*l0 - 5*l1 + l2\n",
      "6  :  l0  :  k11^2 + k12^2 + k21^2 + k22^2 + k31^2 + k32^2 - q\n",
      "7  :  l1  :  20*k11*k22 + k11*k32 + 500*k11 - 20*k12*k21 - k12*k31 + 625*k12 + 20*k21 - 100*k22 + k31 - 5*k32 - 3125\n",
      "8  :  l2  :  -8*k11*k22 - 308*k11 + 8*k12*k21 - 369*k12 - 8*k21 + 52*k22 + k32 + 2101\n",
      "9  :  l3  :  k11*k22 + 85*k11 - k12*k21 + 97*k12 + k21 - 11*k22 - 660\n",
      "10  :  l4  :  -11*k11 - 12*k12 + k22 + 89\n",
      "11  :  l5  :  k11 + k12 - 16\n",
      "12  :  q  :  -l0 + 1\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<html><script type=\"math/tex; mode=display\">\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(2 k_{11} l_{0} + 20 k_{22} l_{1} - 8 k_{22} l_{2} + k_{22} l_{3} + k_{32} l_{1} + 500 l_{1} - 308 l_{2} + 85 l_{3} - 11 l_{4} + l_{5}, 2 k_{12} l_{0} - 20 k_{21} l_{1} + 8 k_{21} l_{2} - k_{21} l_{3} - k_{31} l_{1} + 625 l_{1} - 369 l_{2} + 97 l_{3} - 12 l_{4} + l_{5}, -20 k_{12} l_{1} + 8 k_{12} l_{2} - k_{12} l_{3} + 2 k_{21} l_{0} + 20 l_{1} - 8 l_{2} + l_{3}, 20 k_{11} l_{1} - 8 k_{11} l_{2} + k_{11} l_{3} + 2 k_{22} l_{0} - 100 l_{1} + 52 l_{2} - 11 l_{3} + l_{4}, -k_{12} l_{1} + 2 k_{31} l_{0} + l_{1}, k_{11} l_{1} + 2 k_{32} l_{0} - 5 l_{1} + l_{2}, k_{11}^{2} + k_{12}^{2} + k_{21}^{2} + k_{22}^{2} + k_{31}^{2} + k_{32}^{2} - q, 20 k_{11} k_{22} + k_{11} k_{32} + 500 k_{11} - 20 k_{12} k_{21} - k_{12} k_{31} + 625 k_{12} + 20 k_{21} - 100 k_{22} + k_{31} - 5 k_{32} - 3125, -8 k_{11} k_{22} - 308 k_{11} + 8 k_{12} k_{21} - 369 k_{12} - 8 k_{21} + 52 k_{22} + k_{32} + 2101, k_{11} k_{22} + 85 k_{11} - k_{12} k_{21} + 97 k_{12} + k_{21} - 11 k_{22} - 660, -11 k_{11} - 12 k_{12} + k_{22} + 89, k_{11} + k_{12} - 16, -l_{0} + 1\\right)\\Bold{Q}[k_{11}, k_{12}, k_{21}, k_{22}, k_{31}, k_{32}, s, l_{0}, l_{1}, l_{2}, l_{3}, l_{4}, l_{5}, q]</script></html>"
      ],
      "text/latex": [
       "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(2 k_{11} l_{0} + 20 k_{22} l_{1} - 8 k_{22} l_{2} + k_{22} l_{3} + k_{32} l_{1} + 500 l_{1} - 308 l_{2} + 85 l_{3} - 11 l_{4} + l_{5}, 2 k_{12} l_{0} - 20 k_{21} l_{1} + 8 k_{21} l_{2} - k_{21} l_{3} - k_{31} l_{1} + 625 l_{1} - 369 l_{2} + 97 l_{3} - 12 l_{4} + l_{5}, -20 k_{12} l_{1} + 8 k_{12} l_{2} - k_{12} l_{3} + 2 k_{21} l_{0} + 20 l_{1} - 8 l_{2} + l_{3}, 20 k_{11} l_{1} - 8 k_{11} l_{2} + k_{11} l_{3} + 2 k_{22} l_{0} - 100 l_{1} + 52 l_{2} - 11 l_{3} + l_{4}, -k_{12} l_{1} + 2 k_{31} l_{0} + l_{1}, k_{11} l_{1} + 2 k_{32} l_{0} - 5 l_{1} + l_{2}, k_{11}^{2} + k_{12}^{2} + k_{21}^{2} + k_{22}^{2} + k_{31}^{2} + k_{32}^{2} - q, 20 k_{11} k_{22} + k_{11} k_{32} + 500 k_{11} - 20 k_{12} k_{21} - k_{12} k_{31} + 625 k_{12} + 20 k_{21} - 100 k_{22} + k_{31} - 5 k_{32} - 3125, -8 k_{11} k_{22} - 308 k_{11} + 8 k_{12} k_{21} - 369 k_{12} - 8 k_{21} + 52 k_{22} + k_{32} + 2101, k_{11} k_{22} + 85 k_{11} - k_{12} k_{21} + 97 k_{12} + k_{21} - 11 k_{22} - 660, -11 k_{11} - 12 k_{12} + k_{22} + 89, k_{11} + k_{12} - 16, -l_{0} + 1\\right)\\Bold{Q}[k_{11}, k_{12}, k_{21}, k_{22}, k_{31}, k_{32}, s, l_{0}, l_{1}, l_{2}, l_{3}, l_{4}, l_{5}, q]$$"
      ],
      "text/plain": [
       "Ideal (2*k11*l0 + 20*k22*l1 - 8*k22*l2 + k22*l3 + k32*l1 + 500*l1 - 308*l2 + 85*l3 - 11*l4 + l5, 2*k12*l0 - 20*k21*l1 + 8*k21*l2 - k21*l3 - k31*l1 + 625*l1 - 369*l2 + 97*l3 - 12*l4 + l5, -20*k12*l1 + 8*k12*l2 - k12*l3 + 2*k21*l0 + 20*l1 - 8*l2 + l3, 20*k11*l1 - 8*k11*l2 + k11*l3 + 2*k22*l0 - 100*l1 + 52*l2 - 11*l3 + l4, -k12*l1 + 2*k31*l0 + l1, k11*l1 + 2*k32*l0 - 5*l1 + l2, k11^2 + k12^2 + k21^2 + k22^2 + k31^2 + k32^2 - q, 20*k11*k22 + k11*k32 + 500*k11 - 20*k12*k21 - k12*k31 + 625*k12 + 20*k21 - 100*k22 + k31 - 5*k32 - 3125, -8*k11*k22 - 308*k11 + 8*k12*k21 - 369*k12 - 8*k21 + 52*k22 + k32 + 2101, k11*k22 + 85*k11 - k12*k21 + 97*k12 + k21 - 11*k22 - 660, -11*k11 - 12*k12 + k22 + 89, k11 + k12 - 16, -l0 + 1) of Multivariate Polynomial Ring in k11, k12, k21, k22, k31, k32, s, l0, l1, l2, l3, l4, l5, q over Rational Field"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "vars = [k11,k12,k21,k22,k31,k32,l0,l1,l2,l3,l4,l5,q]\n",
    "PLIST = []\n",
    "for ii in range(len(vars)):\n",
    "    print(ii,\" : \",vars[ii],\" : \",diff(L,vars[ii]))\n",
    "    PLIST.append(diff(L,vars[ii]))\n",
    "I = Ideal(PLIST)\n",
    "I"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Dimension of the ideal"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><script type=\"math/tex; mode=display\">\\newcommand{\\Bold}[1]{\\mathbf{#1}}1</script></html>"
      ],
      "text/latex": [
       "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}1$$"
      ],
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "I.dimension()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Change of the ring (without the variable s), dimension of the new ideal over the new ring"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><script type=\"math/tex; mode=display\">\\newcommand{\\Bold}[1]{\\mathbf{#1}}0</script></html>"
      ],
      "text/latex": [
       "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}0$$"
      ],
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "J = I.change_ring(PolynomialRing(QQ, 'k11,k12,k21,k22,k31,k32,l0,l1,l2,l3,l4,l5,q'))\n",
    "J.dimension()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Algebraic variety, computation of possible solutions w.r.t. q"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><script type=\"math/tex; mode=display\">\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left[\\verb|{q:|\\phantom{\\verb!x!}\\verb|149947.5561771188?,|\\phantom{\\verb!x!}\\verb|l5:|\\phantom{\\verb!x!}\\verb|-21194.45750708729?,|\\phantom{\\verb!x!}\\verb|l4:|\\phantom{\\verb!x!}\\verb|-27092.99027708953?,|\\phantom{\\verb!x!}\\verb|l3:|\\phantom{\\verb!x!}\\verb|-5957.462984593230?,|\\phantom{\\verb!x!}\\verb|l2:|\\phantom{\\verb!x!}\\verb|-737.9872520913827?,|\\phantom{\\verb!x!}\\verb|l1:|\\phantom{\\verb!x!}\\verb|2.648427531308446?,|\\phantom{\\verb!x!}\\verb|l0:|\\phantom{\\verb!x!}\\verb|1,|\\phantom{\\verb!x!}\\verb|k32:|\\phantom{\\verb!x!}\\verb|373.1040444944647?,|\\phantom{\\verb!x!}\\verb|k31:|\\phantom{\\verb!x!}\\verb|17.35255610531564?,|\\phantom{\\verb!x!}\\verb|k22:|\\phantom{\\verb!x!}\\verb|101.10404449446474?,|\\phantom{\\verb!x!}\\verb|k21:|\\phantom{\\verb!x!}\\verb|-3.907738998902481?,|\\phantom{\\verb!x!}\\verb|k12:|\\phantom{\\verb!x!}\\verb|14.104044494464742?,|\\phantom{\\verb!x!}\\verb|k11:|\\phantom{\\verb!x!}\\verb|1.895955505535258?}|, \\verb|{q:|\\phantom{\\verb!x!}\\verb|154095.7160695417?,|\\phantom{\\verb!x!}\\verb|l5:|\\phantom{\\verb!x!}\\verb|-19190.75511277376?,|\\phantom{\\verb!x!}\\verb|l4:|\\phantom{\\verb!x!}\\verb|-31766.99313915121?,|\\phantom{\\verb!x!}\\verb|l3:|\\phantom{\\verb!x!}\\verb|-7105.995278228797?,|\\phantom{\\verb!x!}\\verb|l2:|\\phantom{\\verb!x!}\\verb|-880.9931460774156?,|\\phantom{\\verb!x!}\\verb|l1:|\\phantom{\\verb!x!}\\verb|2.853303091171581?,|\\phantom{\\verb!x!}\\verb|l0:|\\phantom{\\verb!x!}\\verb|1,|\\phantom{\\verb!x!}\\verb|k32:|\\phantom{\\verb!x!}\\verb|204.7678011058971?,|\\phantom{\\verb!x!}\\verb|k31:|\\phantom{\\verb!x!}\\verb|-221.4622564769529?,|\\phantom{\\verb!x!}\\verb|k22:|\\phantom{\\verb!x!}\\verb|-67.23219889410296?,|\\phantom{\\verb!x!}\\verb|k21:|\\phantom{\\verb!x!}\\verb|76.3779508219885?,|\\phantom{\\verb!x!}\\verb|k12:|\\phantom{\\verb!x!}\\verb|-154.2321988941030?,|\\phantom{\\verb!x!}\\verb|k11:|\\phantom{\\verb!x!}\\verb|170.2321988941030?}|, \\verb|{q:|\\phantom{\\verb!x!}\\verb|225149.0338066715?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|155419.5856845946?*I,|\\phantom{\\verb!x!}\\verb|l5:|\\phantom{\\verb!x!}\\verb|-31011.72845957045?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|23105.21464151249?*I,|\\phantom{\\verb!x!}\\verb|l4:|\\phantom{\\verb!x!}\\verb|-47805.83748537921?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|21831.42312177592?*I,|\\phantom{\\verb!x!}\\verb|l3:|\\phantom{\\verb!x!}\\verb|-10603.30148707911?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|4693.838637620011?*I,|\\phantom{\\verb!x!}\\verb|l2:|\\phantom{\\verb!x!}\\verb|-1342.004818623881?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|549.3420250633582?*I,|\\phantom{\\verb!x!}\\verb|l1:|\\phantom{\\verb!x!}\\verb|-6.788613886025828?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|15.11280913409759?*I,|\\phantom{\\verb!x!}\\verb|l0:|\\phantom{\\verb!x!}\\verb|1,|\\phantom{\\verb!x!}\\verb|k32:|\\phantom{\\verb!x!}\\verb|360.1474105331525?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|45.56369481778983?*I,|\\phantom{\\verb!x!}\\verb|k31:|\\phantom{\\verb!x!}\\verb|-344.7980682089170?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|153.5432720434014?*I,|\\phantom{\\verb!x!}\\verb|k22:|\\phantom{\\verb!x!}\\verb|88.1474105331525?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|45.56369481778983?*I,|\\phantom{\\verb!x!}\\verb|k21:|\\phantom{\\verb!x!}\\verb|-72.07186170530965?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|68.91537574625540?*I,|\\phantom{\\verb!x!}\\verb|k12:|\\phantom{\\verb!x!}\\verb|1.147410533152441?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|45.56369481778983?*I,|\\phantom{\\verb!x!}\\verb|k11:|\\phantom{\\verb!x!}\\verb|14.85258946684756?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|45.56369481778983?*I}|, \\verb|{q:|\\phantom{\\verb!x!}\\verb|225149.0338066715?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|155419.5856845946?*I,|\\phantom{\\verb!x!}\\verb|l5:|\\phantom{\\verb!x!}\\verb|-31011.72845957045?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|23105.21464151249?*I,|\\phantom{\\verb!x!}\\verb|l4:|\\phantom{\\verb!x!}\\verb|-47805.83748537921?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|21831.42312177592?*I,|\\phantom{\\verb!x!}\\verb|l3:|\\phantom{\\verb!x!}\\verb|-10603.30148707911?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|4693.838637620011?*I,|\\phantom{\\verb!x!}\\verb|l2:|\\phantom{\\verb!x!}\\verb|-1342.004818623881?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|549.3420250633582?*I,|\\phantom{\\verb!x!}\\verb|l1:|\\phantom{\\verb!x!}\\verb|-6.788613886025828?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|15.11280913409759?*I,|\\phantom{\\verb!x!}\\verb|l0:|\\phantom{\\verb!x!}\\verb|1,|\\phantom{\\verb!x!}\\verb|k32:|\\phantom{\\verb!x!}\\verb|360.1474105331525?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|45.56369481778983?*I,|\\phantom{\\verb!x!}\\verb|k31:|\\phantom{\\verb!x!}\\verb|-344.7980682089170?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|153.5432720434014?*I,|\\phantom{\\verb!x!}\\verb|k22:|\\phantom{\\verb!x!}\\verb|88.1474105331525?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|45.56369481778983?*I,|\\phantom{\\verb!x!}\\verb|k21:|\\phantom{\\verb!x!}\\verb|-72.07186170530965?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|68.91537574625540?*I,|\\phantom{\\verb!x!}\\verb|k12:|\\phantom{\\verb!x!}\\verb|1.147410533152441?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|45.56369481778983?*I,|\\phantom{\\verb!x!}\\verb|k11:|\\phantom{\\verb!x!}\\verb|14.85258946684756?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|45.56369481778983?*I}|\\right]</script></html>"
      ],
      "text/latex": [
       "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left[\\verb|{q:|\\phantom{\\verb!x!}\\verb|149947.5561771188?,|\\phantom{\\verb!x!}\\verb|l5:|\\phantom{\\verb!x!}\\verb|-21194.45750708729?,|\\phantom{\\verb!x!}\\verb|l4:|\\phantom{\\verb!x!}\\verb|-27092.99027708953?,|\\phantom{\\verb!x!}\\verb|l3:|\\phantom{\\verb!x!}\\verb|-5957.462984593230?,|\\phantom{\\verb!x!}\\verb|l2:|\\phantom{\\verb!x!}\\verb|-737.9872520913827?,|\\phantom{\\verb!x!}\\verb|l1:|\\phantom{\\verb!x!}\\verb|2.648427531308446?,|\\phantom{\\verb!x!}\\verb|l0:|\\phantom{\\verb!x!}\\verb|1,|\\phantom{\\verb!x!}\\verb|k32:|\\phantom{\\verb!x!}\\verb|373.1040444944647?,|\\phantom{\\verb!x!}\\verb|k31:|\\phantom{\\verb!x!}\\verb|17.35255610531564?,|\\phantom{\\verb!x!}\\verb|k22:|\\phantom{\\verb!x!}\\verb|101.10404449446474?,|\\phantom{\\verb!x!}\\verb|k21:|\\phantom{\\verb!x!}\\verb|-3.907738998902481?,|\\phantom{\\verb!x!}\\verb|k12:|\\phantom{\\verb!x!}\\verb|14.104044494464742?,|\\phantom{\\verb!x!}\\verb|k11:|\\phantom{\\verb!x!}\\verb|1.895955505535258?}|, \\verb|{q:|\\phantom{\\verb!x!}\\verb|154095.7160695417?,|\\phantom{\\verb!x!}\\verb|l5:|\\phantom{\\verb!x!}\\verb|-19190.75511277376?,|\\phantom{\\verb!x!}\\verb|l4:|\\phantom{\\verb!x!}\\verb|-31766.99313915121?,|\\phantom{\\verb!x!}\\verb|l3:|\\phantom{\\verb!x!}\\verb|-7105.995278228797?,|\\phantom{\\verb!x!}\\verb|l2:|\\phantom{\\verb!x!}\\verb|-880.9931460774156?,|\\phantom{\\verb!x!}\\verb|l1:|\\phantom{\\verb!x!}\\verb|2.853303091171581?,|\\phantom{\\verb!x!}\\verb|l0:|\\phantom{\\verb!x!}\\verb|1,|\\phantom{\\verb!x!}\\verb|k32:|\\phantom{\\verb!x!}\\verb|204.7678011058971?,|\\phantom{\\verb!x!}\\verb|k31:|\\phantom{\\verb!x!}\\verb|-221.4622564769529?,|\\phantom{\\verb!x!}\\verb|k22:|\\phantom{\\verb!x!}\\verb|-67.23219889410296?,|\\phantom{\\verb!x!}\\verb|k21:|\\phantom{\\verb!x!}\\verb|76.3779508219885?,|\\phantom{\\verb!x!}\\verb|k12:|\\phantom{\\verb!x!}\\verb|-154.2321988941030?,|\\phantom{\\verb!x!}\\verb|k11:|\\phantom{\\verb!x!}\\verb|170.2321988941030?}|, \\verb|{q:|\\phantom{\\verb!x!}\\verb|225149.0338066715?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|155419.5856845946?*I,|\\phantom{\\verb!x!}\\verb|l5:|\\phantom{\\verb!x!}\\verb|-31011.72845957045?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|23105.21464151249?*I,|\\phantom{\\verb!x!}\\verb|l4:|\\phantom{\\verb!x!}\\verb|-47805.83748537921?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|21831.42312177592?*I,|\\phantom{\\verb!x!}\\verb|l3:|\\phantom{\\verb!x!}\\verb|-10603.30148707911?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|4693.838637620011?*I,|\\phantom{\\verb!x!}\\verb|l2:|\\phantom{\\verb!x!}\\verb|-1342.004818623881?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|549.3420250633582?*I,|\\phantom{\\verb!x!}\\verb|l1:|\\phantom{\\verb!x!}\\verb|-6.788613886025828?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|15.11280913409759?*I,|\\phantom{\\verb!x!}\\verb|l0:|\\phantom{\\verb!x!}\\verb|1,|\\phantom{\\verb!x!}\\verb|k32:|\\phantom{\\verb!x!}\\verb|360.1474105331525?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|45.56369481778983?*I,|\\phantom{\\verb!x!}\\verb|k31:|\\phantom{\\verb!x!}\\verb|-344.7980682089170?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|153.5432720434014?*I,|\\phantom{\\verb!x!}\\verb|k22:|\\phantom{\\verb!x!}\\verb|88.1474105331525?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|45.56369481778983?*I,|\\phantom{\\verb!x!}\\verb|k21:|\\phantom{\\verb!x!}\\verb|-72.07186170530965?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|68.91537574625540?*I,|\\phantom{\\verb!x!}\\verb|k12:|\\phantom{\\verb!x!}\\verb|1.147410533152441?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|45.56369481778983?*I,|\\phantom{\\verb!x!}\\verb|k11:|\\phantom{\\verb!x!}\\verb|14.85258946684756?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|45.56369481778983?*I}|, \\verb|{q:|\\phantom{\\verb!x!}\\verb|225149.0338066715?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|155419.5856845946?*I,|\\phantom{\\verb!x!}\\verb|l5:|\\phantom{\\verb!x!}\\verb|-31011.72845957045?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|23105.21464151249?*I,|\\phantom{\\verb!x!}\\verb|l4:|\\phantom{\\verb!x!}\\verb|-47805.83748537921?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|21831.42312177592?*I,|\\phantom{\\verb!x!}\\verb|l3:|\\phantom{\\verb!x!}\\verb|-10603.30148707911?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|4693.838637620011?*I,|\\phantom{\\verb!x!}\\verb|l2:|\\phantom{\\verb!x!}\\verb|-1342.004818623881?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|549.3420250633582?*I,|\\phantom{\\verb!x!}\\verb|l1:|\\phantom{\\verb!x!}\\verb|-6.788613886025828?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|15.11280913409759?*I,|\\phantom{\\verb!x!}\\verb|l0:|\\phantom{\\verb!x!}\\verb|1,|\\phantom{\\verb!x!}\\verb|k32:|\\phantom{\\verb!x!}\\verb|360.1474105331525?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|45.56369481778983?*I,|\\phantom{\\verb!x!}\\verb|k31:|\\phantom{\\verb!x!}\\verb|-344.7980682089170?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|153.5432720434014?*I,|\\phantom{\\verb!x!}\\verb|k22:|\\phantom{\\verb!x!}\\verb|88.1474105331525?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|45.56369481778983?*I,|\\phantom{\\verb!x!}\\verb|k21:|\\phantom{\\verb!x!}\\verb|-72.07186170530965?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|68.91537574625540?*I,|\\phantom{\\verb!x!}\\verb|k12:|\\phantom{\\verb!x!}\\verb|1.147410533152441?|\\phantom{\\verb!x!}\\verb|+|\\phantom{\\verb!x!}\\verb|45.56369481778983?*I,|\\phantom{\\verb!x!}\\verb|k11:|\\phantom{\\verb!x!}\\verb|14.85258946684756?|\\phantom{\\verb!x!}\\verb|-|\\phantom{\\verb!x!}\\verb|45.56369481778983?*I}|\\right]$$"
      ],
      "text/plain": [
       "[{q: 149947.5561771188?, l5: -21194.45750708729?, l4: -27092.99027708953?, l3: -5957.462984593230?, l2: -737.9872520913827?, l1: 2.648427531308446?, l0: 1, k32: 373.1040444944647?, k31: 17.35255610531564?, k22: 101.10404449446474?, k21: -3.907738998902481?, k12: 14.104044494464742?, k11: 1.895955505535258?},\n",
       " {q: 154095.7160695417?, l5: -19190.75511277376?, l4: -31766.99313915121?, l3: -7105.995278228797?, l2: -880.9931460774156?, l1: 2.853303091171581?, l0: 1, k32: 204.7678011058971?, k31: -221.4622564769529?, k22: -67.23219889410296?, k21: 76.3779508219885?, k12: -154.2321988941030?, k11: 170.2321988941030?},\n",
       " {q: 225149.0338066715? - 155419.5856845946?*I, l5: -31011.72845957045? + 23105.21464151249?*I, l4: -47805.83748537921? + 21831.42312177592?*I, l3: -10603.30148707911? + 4693.838637620011?*I, l2: -1342.004818623881? + 549.3420250633582?*I, l1: -6.788613886025828? - 15.11280913409759?*I, l0: 1, k32: 360.1474105331525? - 45.56369481778983?*I, k31: -344.7980682089170? + 153.5432720434014?*I, k22: 88.1474105331525? - 45.56369481778983?*I, k21: -72.07186170530965? + 68.91537574625540?*I, k12: 1.147410533152441? - 45.56369481778983?*I, k11: 14.85258946684756? + 45.56369481778983?*I},\n",
       " {q: 225149.0338066715? + 155419.5856845946?*I, l5: -31011.72845957045? - 23105.21464151249?*I, l4: -47805.83748537921? - 21831.42312177592?*I, l3: -10603.30148707911? - 4693.838637620011?*I, l2: -1342.004818623881? - 549.3420250633582?*I, l1: -6.788613886025828? + 15.11280913409759?*I, l0: 1, k32: 360.1474105331525? + 45.56369481778983?*I, k31: -344.7980682089170? - 153.5432720434014?*I, k22: 88.1474105331525? + 45.56369481778983?*I, k21: -72.07186170530965? - 68.91537574625540?*I, k12: 1.147410533152441? + 45.56369481778983?*I, k11: 14.85258946684756? - 45.56369481778983?*I}]"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lsg = J.variety(QQbar)\n",
    "lsg"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Selection of the minimum solution q"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><script type=\"math/tex; mode=display\">\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\verb|{q:|\\phantom{\\verb!x!}\\verb|149947.5561771188?,|\\phantom{\\verb!x!}\\verb|l5:|\\phantom{\\verb!x!}\\verb|-21194.45750708729?,|\\phantom{\\verb!x!}\\verb|l4:|\\phantom{\\verb!x!}\\verb|-27092.99027708953?,|\\phantom{\\verb!x!}\\verb|l3:|\\phantom{\\verb!x!}\\verb|-5957.462984593230?,|\\phantom{\\verb!x!}\\verb|l2:|\\phantom{\\verb!x!}\\verb|-737.9872520913827?,|\\phantom{\\verb!x!}\\verb|l1:|\\phantom{\\verb!x!}\\verb|2.648427531308446?,|\\phantom{\\verb!x!}\\verb|l0:|\\phantom{\\verb!x!}\\verb|1,|\\phantom{\\verb!x!}\\verb|k32:|\\phantom{\\verb!x!}\\verb|373.1040444944647?,|\\phantom{\\verb!x!}\\verb|k31:|\\phantom{\\verb!x!}\\verb|17.35255610531564?,|\\phantom{\\verb!x!}\\verb|k22:|\\phantom{\\verb!x!}\\verb|101.10404449446474?,|\\phantom{\\verb!x!}\\verb|k21:|\\phantom{\\verb!x!}\\verb|-3.907738998902481?,|\\phantom{\\verb!x!}\\verb|k12:|\\phantom{\\verb!x!}\\verb|14.104044494464742?,|\\phantom{\\verb!x!}\\verb|k11:|\\phantom{\\verb!x!}\\verb|1.895955505535258?}|</script></html>"
      ],
      "text/latex": [
       "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\verb|{q:|\\phantom{\\verb!x!}\\verb|149947.5561771188?,|\\phantom{\\verb!x!}\\verb|l5:|\\phantom{\\verb!x!}\\verb|-21194.45750708729?,|\\phantom{\\verb!x!}\\verb|l4:|\\phantom{\\verb!x!}\\verb|-27092.99027708953?,|\\phantom{\\verb!x!}\\verb|l3:|\\phantom{\\verb!x!}\\verb|-5957.462984593230?,|\\phantom{\\verb!x!}\\verb|l2:|\\phantom{\\verb!x!}\\verb|-737.9872520913827?,|\\phantom{\\verb!x!}\\verb|l1:|\\phantom{\\verb!x!}\\verb|2.648427531308446?,|\\phantom{\\verb!x!}\\verb|l0:|\\phantom{\\verb!x!}\\verb|1,|\\phantom{\\verb!x!}\\verb|k32:|\\phantom{\\verb!x!}\\verb|373.1040444944647?,|\\phantom{\\verb!x!}\\verb|k31:|\\phantom{\\verb!x!}\\verb|17.35255610531564?,|\\phantom{\\verb!x!}\\verb|k22:|\\phantom{\\verb!x!}\\verb|101.10404449446474?,|\\phantom{\\verb!x!}\\verb|k21:|\\phantom{\\verb!x!}\\verb|-3.907738998902481?,|\\phantom{\\verb!x!}\\verb|k12:|\\phantom{\\verb!x!}\\verb|14.104044494464742?,|\\phantom{\\verb!x!}\\verb|k11:|\\phantom{\\verb!x!}\\verb|1.895955505535258?}|$$"
      ],
      "text/plain": [
       "{q: 149947.5561771188?, l5: -21194.45750708729?, l4: -27092.99027708953?, l3: -5957.462984593230?, l2: -737.9872520913827?, l1: 2.648427531308446?, l0: 1, k32: 373.1040444944647?, k31: 17.35255610531564?, k22: 101.10404449446474?, k21: -3.907738998902481?, k12: 14.104044494464742?, k11: 1.895955505535258?}"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lx = lsg[0]\n",
    "lx"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Numerical feedback gain matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><script type=\"math/tex; mode=display\">\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(\\begin{array}{rr}\n",
       "1.89595550553526 & 14.1040444944647 \\\\\n",
       "-3.90773899890248 & 101.104044494465 \\\\\n",
       "17.3525561053156 & 373.104044494465\n",
       "\\end{array}\\right)</script></html>"
      ],
      "text/latex": [
       "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(\\begin{array}{rr}\n",
       "1.89595550553526 & 14.1040444944647 \\\\\n",
       "-3.90773899890248 & 101.104044494465 \\\\\n",
       "17.3525561053156 & 373.104044494465\n",
       "\\end{array}\\right)$$"
      ],
      "text/plain": [
       "[ 1.89595550553526  14.1040444944647]\n",
       "[-3.90773899890248  101.104044494465]\n",
       "[ 17.3525561053156  373.104044494465]"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "K0 = K.subs(k11=RR(lx['k11']),k12=RR(lx['k12']),\n",
    "            k21=RR(lx['k21']),k22=RR(lx['k22']),\n",
    "            k31=RR(lx['k31']),k32=RR(lx['k32']))\n",
    "K0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Frobenius norm of the computed feedback matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><script type=\"math/tex; mode=display\">\\newcommand{\\Bold}[1]{\\mathbf{#1}}387.2306240176759</script></html>"
      ],
      "text/latex": [
       "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}387.2306240176759$$"
      ],
      "text/plain": [
       "387.2306240176759"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "K0.norm('frob')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Verification of the closed-loop eigenvalues (over the rational field)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><script type=\"math/tex; mode=display\">\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left[-4.999999999999944?, -4.000000000000080?, -2.999999999999979?, -1.999999999999999? - 1.999999999999999? \\sqrt{-1}, -1.999999999999999? + 1.999999999999999? \\sqrt{-1}\\right]</script></html>"
      ],
      "text/latex": [
       "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left[-4.999999999999944?, -4.000000000000080?, -2.999999999999979?, -1.999999999999999? - 1.999999999999999? \\sqrt{-1}, -1.999999999999999? + 1.999999999999999? \\sqrt{-1}\\right]$$"
      ],
      "text/plain": [
       "[-4.999999999999944?, -4.000000000000080?, -2.999999999999979?, -1.999999999999999? - 1.999999999999999?*I, -1.999999999999999? + 1.999999999999999?*I]"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A0 = matrix(QQ,A-B*K0*C)\n",
    "A0.eigenvalues()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Verification of the closed-loop eigenvalues (as floating point numbers)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><script type=\"math/tex; mode=display\">\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left[-5.0000000000000435, -2.0000000000000067 + 2.0000000000000058i, -2.0000000000000067 - 2.0000000000000058i, -3.99999999999994, -2.9999999999999916\\right]</script></html>"
      ],
      "text/latex": [
       "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left[-5.0000000000000435, -2.0000000000000067 + 2.0000000000000058i, -2.0000000000000067 - 2.0000000000000058i, -3.99999999999994, -2.9999999999999916\\right]$$"
      ],
      "text/plain": [
       "[-5.0000000000000435,\n",
       " -2.0000000000000067 + 2.0000000000000058*I,\n",
       " -2.0000000000000067 - 2.0000000000000058*I,\n",
       " -3.99999999999994,\n",
       " -2.9999999999999916]"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A0 = matrix(RDF,A-B*K0*C)\n",
    "A0.eigenvalues()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "SageMath 9.3",
   "language": "sage",
   "name": "sagemath"
  },
  "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.9.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}