Find the inverse function of $\log_{\sqrt{4-x^2} } \left(x^3+5x^2-x \right)$ Find the inverse function for the following function:
$$f(x) = \log_{\sqrt{4-x^2} } \left(x^3+5x^2-x \right)$$
Thanks.
 A: As you can see from the graph, your function is not one-to-one. (The blue dashed lines are vertical asymptotes, as is the $y$ axis.)

A particular $y$ value can have up to $4$ corresponding $x$ values. Therefore, the function does not have an inverse.
It would be possible to restrict the domain so that the function becomes one-to-one. These are the basic intervals you could use for a domain: $\left(-2,-\sqrt{3}\right)$, $\left(-\sqrt{3},0\right)$, $\left(\frac{-5+\sqrt{29}}{2},\sqrt{3}\right)$, and $\left(\sqrt{3},2\right)$. The largest of these is the second. Another interval that is a subset of one of these would also work.
Your function expression can be simplified in several ways, but I do not see any way to find a closed-form expression for any inverse for a restriction of your function. I doubt that any closed-form expression is possible. We could calculate an inverse and write non-closed-form expressions, but that is a different thing.
A: 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.
