# Inverting a matrix of symbolic equations

I’d like to invert a 4x4 matrix of symbolic equations.

I’m able to successfully invert a matrix of symbolic expressions like this:

``````using Symbolics
using LinearAlgebra
@variables x y[1:16] z
Symbolics.scalarize(y)

eq11 = x
eq12 = x^2
eq13 = x+15
eq14 = cos(x)
eq21 = log(x)
eq22 = sqrt(x)
eq23 = x^3
eq24 = -x
eq31 = 1/x
eq32 = (x+4)^3
eq33 = 69*x
eq34 = 42
eq41 = 14/x
eq42 = x^(3/5)
eq43 = sin(x)
eq44 = csc(x)

M = [eq11 eq12 eq13 eq14;
eq21 eq22 eq23 eq24;
eq31 eq32 eq33 eq34;
eq41 eq42 eq43 eq44]

inv(M)
``````

but if I change the expressions to equations

``````eq11 = y ~ x
eq12 = y ~ x^2
eq13 = y ~ x+15
eq14 = y ~ cos(x)
eq21 = y ~ log(x)
eq22 = y ~ sqrt(x)
eq23 = y ~ x^3
eq24 = y ~ -x
eq31 = y ~ 1/x
eq32 = y ~ (x+4)^3
eq33 = y ~ 69*x
eq34 = y ~ 42
eq41 = y ~ 14/x
eq42 = y ~ x^(3/5)
eq43 = y ~ sin(x)
eq44 = y ~ csc(x)
``````

the inversion fails.

Is there a way around this?

What is the inverse of a single equation like a = b?

If `=(a, b)` is a function that maps two numbers to a boolean, then `=^{-1}(c)` should be a function that takes a boolean `c` and returns (the) two numbers for which `=(a, b) = c`. It will not in general be well-defined since the equality operator cannot be bijective by the pidgeonhole principle, but if we settle for an inverse then maybe

``````julia> ==⁻¹(c) = (1, Int(c))
==⁻¹ (generic function with 1 method)

julia> ==⁻¹(true)
(1, 1)

julia> ==⁻¹(false)
(1, 0)
``````

could be an acceptable implementation.

Arguably, the inverse of an equation is the tuple (LHS, RHS):

``````julia> macro eqinv(ex)
return esc(:((\$(ex.args), \$(ex.args))))
end;
julia> a = 2; b = 4;
julia> @eqinv a==b
(2, 4)
julia> ==(@eqinv(a==b)...)
false
julia> ==(@eqinv(a==a)...)
true
``````

i.e. the inverted function (macro) “undoes” the original. Can’t imagine this is very useful though.

Sure, open an issue. But this is… really weird . I’m not sure of a use case where you wouldn’t just invert the matrix of expressions instead of equations, so I don’t think it would get prioritized without a clear idea of a use case.

Yeah I can almost guarantee my solutions are not what op wants.

Almost. I’ve seen odder requests.