Characteristic polynomial using Hessenberg algorithm: pcar_hessenberg

### 5.48.8 Characteristic polynomial using Hessenberg algorithm: pcar_hessenberg

The pcar_hessenberg command finds the characteristic polynomial of a matrix. It computes the polynomial using the Hessenberg algorithm (see e.g. Henri Cohen, A Course in Computational Algebraic Number Theory) which is more efficient (O(n3) deterministic) if the coefficients of the matrix are in a finite field or use a finite representation like approximate numeric coefficients. Note however that this algorithm behaves badly if the coefficients are, for example, in ℚ.

- pcar_hessenberg takes one mandatory argument and one optional argument:
  - A, a square matrix.
  - Optionally, x, a variable name.
- pcar_hessenberg(A ⟨ x⟩) returns the characteristic polynomial of A. It is written as the list of its coefficients if no variable name was provided or written as an expression with respect to x if there is a second argument.

#### Examples

- Input:
  pcar_hessenberg([[4,1,-2],[1,2,-1],[2,1,0]] % 37)
  Output:

  ⎡ ⎣ | 1%37, | ⎛ ⎝ | −6 | ⎞ ⎠ | %37,12%37, | ⎛ ⎝ | −8 | ⎞ ⎠ | %37 | ⎤ ⎦

- Input:
  pcar_hessenberg([[4,1,-2],[1,2,-1],[2,1,0]] % 37,x)
  Output:

  ⎛ ⎝ | 1%37 | ⎞ ⎠ | x3+ | ⎛ ⎝ | ⎛ ⎝ | −6 | ⎞ ⎠ | %37 | ⎞ ⎠ | x2+ | ⎛ ⎝ | 12%37 | ⎞ ⎠ | x+ | ⎛ ⎝ | −8 | ⎞ ⎠ | %37

  Hence, the characteristic polynomial of [[4,1,-2],[1,2,-1],[2,1,0]] in ℤ/37 ℤ is x3−6x2+12x−8.