# Inversion of three series of three characters

I want to invert three series of three parameters to have the parameters as series. Namely

q11 = q1 (1 - x^2/12 + 2 q2*x^2 + 6 q2^2*x^2)
q22 = q2 (1 - x^2/12 + 2 q1 x^2 + 6 q1^2 x^2)
q12 = 1 - x + x^2/2 - x^3/144


$q_{11} = q_1(1-\frac{x^2}{12}+2q_2x^2+6q_2^2x^2) + O(q_1^2,q_2^3,x^3)\\q_{22} = q_2(1-\frac{x^2}{12}+2q_1x^2+6q_1^2x^2)+O(q_2^2,q_1^3,x^3)\\ q_{12}=1-x+\frac{x^2}{2}-\frac{x^3}{144}+\frac{q_1^3x^3}{2}+O(q_1^4,q_2,x^4)$

I want to be able to produce $q_1,q_2,x$ as functions of $q_{11},q_{22},q_{12}$ for a given order in the expansion.

The built-in function InverseSeries does not work in the case of multiple variable, neither does the built-in function Solve. So the general question is, how one does invert multivariable expansions in mathematica up to a given order

Any suggestions would be very welcome.

• The first suggestion: just rewrite it in Mathematica code in a way enabling one to copy-paste it. – Alexei Boulbitch Dec 1 '16 at 12:31
• maybe you want to pose this on math.stackexchange.com – george2079 Dec 1 '16 at 15:32

What does it mean: "for a given order of expansion"?

For the order your limited the expansion above, it is possible but the result is huge and hardly useful:

    Clear[q1, q2, q11, q22, q12, x];
eq1 = q11 == q1 (1 - x^2/12 + 2 q2*x^2 + 6 q2^2*x^2)
eq2 = q22 == q2 (1 - x^2/12 + 2 q1 x^2 + 6 q1^2 x^2)
eq3 = q12 == 1 - x + x^2/2 - x^3/144


and then make

sl = Solve[{eq1, eq2, eq3}, {q1, q2, x}]


and have a look at the first part of the first solution:

sl[[1, 1]]


I don not give it here, since it is much too long.

Edit: to address the explanation: "What I mean is to have the expansion of q1,q2 and x up to 4th order, or up to fifth order in q11,q22 and q12."

I think you might approach this problem by an iterative method. Just to demonstrate, how it works on a simple example, let us take your last equation and take x into the left-hand part, while all the rest into the right-hand part. Than this right hand part takes the form:

f[x_] := 1 + x^2/2 - x^3/144 - q12;


Now we can iterate:

Nest[f, x, 2] // Expand // Simplify

(* (1/429981696)(641986560 + 2985984 q12^3 + 210511872 x^2 -
2923776 x^3 + 51508224 x^4 - 1430784 x^5 - 363312 x^6 + 15552 x^7 -
216 x^8 + x^9 + 62208 q12^2 (3312 - 72 x^2 + x^3) +
432 q12 (-1969920 - 476928 x^2 + 6624 x^3 + 5184 x^4 - 144 x^5 +
x^6))  *)


You may also limit the expression, say, by the terms hot higher than x^3:

(Nest[f, x, 2] // Expand) /. x^n_ /; n > 3 -> 0 // Simplify

(* (10320 + 48 q12^3 + 3384 x^2 - 47 x^3 + q12^2 (3312 - 72 x^2 + x^3) +
2 q12 (-6840 - 1656 x^2 + 23 x^3))/6912  *)


The terms obtained are still sometimes of the order higher than 3. But the unnecessary terms is easier to remove manually, than programmatically. The same, but more cumbersome, might be done with the other equations.

However, the problem of this system of equation is that it has several solutions, and these are not analytical. So generally I guess that you need to know, which one of the solution do you take, and what branch of the given solution do you take. I do not know, how to address this problem with the iterative approach.

• What I mean by for a given order is for example, to have the expansion of q1,q2 and x up to 4th order, or up to fifth order in q11,q22 and q12. – Ezareth Dec 1 '16 at 14:12
• can you take the series expansion of the Solve result? – george2079 Dec 1 '16 at 15:28
• No it doesn't work since the solution returned by Solve is a root function. – Ezareth Dec 1 '16 at 15:54

The new in M12 function AsymptoticSolve can be used to find the series. Here are your equations:

eqns = {
q11 == q1 (1 - x^2/12 + 2 q2*x^2 + 6 q2^2*x^2),
q22 == q2 (1 - x^2/12 + 2 q1 x^2 + 6 q1^2 x^2),
q12 == 1 - x + x^2/2 - x^3/144 + q1^3 x^3/2
};


First we need to find the zeroth order approximation, so that AsymptoticSolve doesn't have to work so hard:

zero = Solve[eqns /. {q11 -> 0, q22 -> 0, q12 -> 0}, {q1, q2, x}];


There are many zeroth order possibilities:

Length[zero]


21

Let's choose the first:

zero[] //InputForm


{q1 -> Root[{-12 + #1^2 & , -13 + 7*#1 + 72*#2^3 & }, {1, 1}], q2 -> 0, x -> -2*Sqrt}

Since the q1 value is unwieldy, I will replace it with a symbol that numericizes to it:

NumericQ[α] = True;
N[α, _] = q1 /. zero[];


Now, we are ready to use AsymptoticSolve:

AsymptoticSolve[
eqns,
{{q1, q2, x}, {α, 0, -2 Sqrt}},
{{q11, q22, q12}, {0, 0, 0}, 1}
]


{{q1 -> -(q12/(36 Sqrt α^2)) + α + ( q22 (5 + 8 Sqrt - 72 α^3))/(144 α^3 (1 + 3 α)) + ( q11 (-5 - 8 Sqrt + 72 α^3))/(144 α^3), q2 -> q22/(24 α (1 + 3 α)), x -> -2 Sqrt + (Sqrt q11)/α - ( Sqrt q22)/(α (1 + 3 α))}}