Matrix in SymbolicUtils?

I can’t imagine it getting any simpler than ModelingToolkit. Just literally write the Julia code:

julia> using ModelingToolkit

julia> @variables u[1:3,1:3]
(Operation[u₁ˏ₁ u₁ˏ₂ u₁ˏ₃; u₂ˏ₁ u₂ˏ₂ u₂ˏ₃; u₃ˏ₁ u₃ˏ₂ u₃ˏ₃],)

julia> det(u)
(((1u₁ˏ₁) * (u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * ((u₃ˏ₃ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃))) * 1

julia> inv(u)
3×3 Array{Operation,2}:
 u₁ˏ₁ \ ((identity(true) - u₁ˏ₃ * (((u₃ˏ₃ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃)) \ ((identity(0) - (u₃ˏ₁ * inv(u₁ˏ₁)) * identity(true)) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * 
(identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(true))))) - u₁ˏ₂ * ((u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) \ ((identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(true)) - (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) * (((u₃ˏ₃ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃)) \ ((identity(0) - (u₃ˏ₁ * inv(u₁ˏ₁)) * identity(true)) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(true)))))))  …  u₁ˏ₁ \ ((identity(0) - u₁ˏ₃ * (((u₃ˏ₃ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃)) \ ((identity(true) - (u₃ˏ₁ 
* inv(u₁ˏ₁)) * identity(0)) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(0))))) - u₁ˏ₂ * ((u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) \ ((identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(0)) - (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) * (((u₃ˏ₃ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃)) \ ((identity(true) - (u₃ˏ₁ * inv(u₁ˏ₁)) * identity(0)) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(0)))))))        



                                                                   (u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) \ ((identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(true)) - (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) * (((u₃ˏ₃ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃)) \ ((identity(0) - (u₃ˏ₁ * inv(u₁ˏ₁)) * identity(true)) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(true)))))


                                                                 (u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) \ ((identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(0)) - (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) * (((u₃ˏ₃ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃)) \ ((identity(true) - (u₃ˏ₁ * inv(u₁ˏ₁)) * identity(0)) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * 
u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(0)))))        




                                                                                           ((u₃ˏ₃ - (u₃ˏ₁ * 
inv(u₁ˏ₁)) * u₁ˏ₃) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (u₂ˏ₃ - 
(u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃)) \ ((identity(0) - (u₃ˏ₁ * inv(u₁ˏ₁)) * identity(true)) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(true)))



                                                                                      ((u₃ˏ₃ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃)) \ ((identity(true) - (u₃ˏ₁ * inv(u₁ˏ₁)) * identity(0)) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) 
* u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(0))) 

and simplify it if you need to:

julia> @time simplify.(inv(u))
  0.225683 seconds (621.50 k allocations: 18.274 MiB)
3×3 Array{Operation,2}:
 u₁ˏ₁ \ (true + -1 * (u₁ˏ₂ * ((-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) \ (-1 * inv(u₁ˏ₁) * u₂ˏ₁ + -1 * ((u₃ˏ₃ + -1 * (inv(u₁ˏ₁) * u₁ˏ₃ * u₃ˏ₁ + inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + 
u₃ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))) \ (-1 * inv(u₁ˏ₁) * u₃ˏ₁ + inv(u₁ˏ₁) * u₂ˏ₁ * inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + u₃ˏ₂))) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))) + u₁ˏ₃ * ((u₃ˏ₃ + -1 * (inv(u₁ˏ₁) * u₁ˏ₃ * u₃ˏ₁ + inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + u₃ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))) \ (-1 * inv(u₁ˏ₁) * u₃ˏ₁ + inv(u₁ˏ₁) * u₂ˏ₁ * inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + u₃ˏ₂)))))  …  u₁ˏ₁ \ (-1 * 
u₁ˏ₂ * ((-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) \ (-1 * ((u₃ˏ₃ + -1 * (inv(u₁ˏ₁) * u₁ˏ₃ * u₃ˏ₁ + inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + u₃ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))) \ 1) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))) + -1 * u₁ˏ₃ * ((u₃ˏ₃ + -1 * (inv(u₁ˏ₁) * u₁ˏ₃ * u₃ˏ₁ + inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + u₃ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))) \ 1))



           (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) \ (-1 * inv(u₁ˏ₁) * u₂ˏ₁ + -1 * ((u₃ˏ₃ + -1 * (inv(u₁ˏ₁) * 
u₁ˏ₃ * u₃ˏ₁ + inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + u₃ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))) \ (-1 * inv(u₁ˏ₁) * u₃ˏ₁ + inv(u₁ˏ₁) * u₂ˏ₁ * inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ 
+ u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + u₃ˏ₂))) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))

                                                                                     (-1 * inv(u₁ˏ₁) * u₁ˏ₂ 
* u₂ˏ₁ + u₂ˏ₂) \ (-1 * ((u₃ˏ₃ + -1 * (inv(u₁ˏ₁) * u₁ˏ₃ * u₃ˏ₁ + inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + u₃ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))) \ 1) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))




                (u₃ˏ₃ + -1 * (inv(u₁ˏ₁) * u₁ˏ₃ * u₃ˏ₁ + inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + u₃ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))) \ (-1 * inv(u₁ˏ₁) * u₃ˏ₁ + inv(u₁ˏ₁) 
* u₂ˏ₁ * inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + u₃ˏ₂))


                                                                  (u₃ˏ₃ + -1 * (inv(u₁ˏ₁) * u₁ˏ₃ * u₃ˏ₁ + inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + u₃ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))) \ 1
4 Likes