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