Brute force inverse. It is always possible to tabulate the function over a certain interval,
for example $\left(-\sqrt{3},0\right)$ as suggested by Rory Daulton. For each argument of the inverse function
as desired followed by a search in the table entry of the $y$-values and constructing the corresponding function
$x$-value by interpolation. Here comes a non-optimized Pascal program snippet that does the job.
The more refined the sampling (`Wide = 1000` here ) , the better the result.
program furious;
const
Wide : integer = 1000;
var
xmin,xmax : double;
x,y : array of double;
function F(x : double) : double;
begin
F := ln(x*sqr(x)+5*sqr(x)-x)/ln(sqrt(4-sqr(x)));
end;
function i2x(i : integer) : double;
begin
i2x := xmin + i*(xmax-xmin)/(Wide-1);
end;
procedure table;
var
i : integer;
min,max : double;
begin
xmin := -sqrt(3); xmax := 0;
SetLength(x,Wide);
SetLength(y,Wide);
min := 0; max := 0;
{ Avoiding singularities }
for i := 1 to Wide-2 do
begin
x[i] := i2x(i);
y[i] := F(x[i]);
if y[i] < min then min := y[i];
if y[i] > max then max := y[i];
{ if i < 20 then TEST
Writeln(y[i],' ',x[i]); }
end;
{ Writeln(min,' < x <',max); }
end;
function inverse(w : double) : double;
var
k,item : integer;
begin
item := 0;
for k := 1 to Wide-3 do
begin
item := k;
if (y[k+1] <= w) and (w <= y[k]) then Break;
end;
k := item; { Writeln(k); }
inverse := x[k+1]+(w-y[k+1])/(y[k]-y[k+1])*(x[k]-x[k+1]);
end;
begin
table;
Writeln(inverse(100));
end.
Output:
-1.71754524598803E+0000
Note. In the world where I come from - Applied Physics -
there exist truly ugly functions (e.g. of temperature) that aim to describe material
properties, often consisting of several pieces. Finding the inverse of
such a function can only be done with the above method, as far as I know.
Insisting on closed forms simply means there that you're out of business.