A short demonstration
An important thing: all objects in FriCAS have a type. This enables us to give a simple demonstration of the Cayley-Hamilton theorem.
Let n equal 4. The semicolon at the end of the input tells FriCAS not to display the result. Thus, only its type is shown:
fricas
(1) -> n := 4;
We define an abbreviation: let SM
be the ring of quadratic
matrices with rational functions as entries:
fricas
SM ==> SquareMatrix(n, FRAC POLY INT)
Type: Void
Let M
be a generic
matrix:
fricas
M: SM := matrix [[a[i,j] for j in 1..n] for i in 1..n]
Type: SquareMatrix
?(4,
Fraction(Polynomial(Integer)))
Compute the characteristis polynomial of 'M':
fricas
P := determinant (M - x * 1);
Type: Fraction(Polynomial(Integer))
We now interpret P
as univariate polynomial in x
, coefficients being from the
matrices. The double colon performs this coercion:
fricas
Q := P::UP(x, SM);
Finally we evaluate this polynomial with the original matrix as argument. In FriCAS you do not need to use parenthesis if the function takes only one argument:
fricas
Q M
Type: SquareMatrix
?(4,
Fraction(Polynomial(Integer)))
Some matrix computations under TeXmacs (this is old screenshot from Axiom era).

Notice the hierarchical editing capabilities of TeXmacs (again this is old screenshot from Axiom era).

Some more complicated computations:
fricas
)cl all
All user variables and function definitions have been cleared.
Word := FreeMonoid(Symbol)
Type: Type
fricas
poly:= XPR(Integer,Word)
Type: Type
fricas
p:poly := 2 * x - 3 * y + 1
fricas
q:poly := 2 * x + 1
fricas
p + q
fricas
p * q
fricas
(p +q)^2 -p^2 -q^2 - 2*p*q
fricas
M := SquareMatrix(2,Fraction Integer)
Type: Type
fricas
poly1:= XPR(M,Word)
Type: Type
fricas
m1:M := matrix [[i*j^2 for i in 1..2] for j in 1..2]
Type: SquareMatrix
?(2,
Fraction(Integer))
fricas
m2:M := m1 - 5/4
Type: SquareMatrix
?(2,
Fraction(Integer))
fricas
m3: M := m2^2
Type: SquareMatrix
?(2,
Fraction(Integer))
fricas
pm:poly1 := m1*x + m2*y + m3*z - 2/3
Type: XPolynomialRing
?(SquareMatrix
?(2,
Fraction(Integer)),
FreeMonoid(Symbol))
fricas
qm:poly1 := pm - m1*x
Type: XPolynomialRing
?(SquareMatrix
?(2,
Fraction(Integer)),
FreeMonoid(Symbol))
fricas
qm^3
Type: XPolynomialRing
?(SquareMatrix
?(2,
Fraction(Integer)),
FreeMonoid(Symbol))