# Series expansion with criteria on the coefficients

I will first do an illustrative example. Suppose I have the following function:

$$f(\vec{x},\vec{t})=\frac{x_1x_2}{(1-x_1 x_2^{-1} t_1)(1-x_2x_1^{-1} t_2)}$$

I want to expand it with respect to $$(t_1,t_2)$$, and then select only those terms that are proportional to $$x_1,x_2$$. So, basically, in my example, I can do

Coefficient[Expand[Normal[Series[x[1] x[2]/((1 - h t[1] x[1] x[2]^-1) (1 - h t[2] x[2] x[1]^-1)), {h, 0, 10}]] /. h -> 1], x[1] x[2]]


And the result will be

1 + t[1] t[2] + t[1]^2 t[2]^2 + t[1]^3 t[2]^3 + t[1]^4 t[2]^4 + t[1]^5 t[2]^5


Now, the problem comes when there are very complicated functions, depending on an arbitrary number of variables $$\vec{t}$$, so the series is very slow at higher powers because of the large coefficients that may be present. There is also a problem of Expand that will saturate the RAM eventually, and if I don't do the Expand, the Coefficient is not selected properly.

Is there a way to make the Series Expansion and at the same time select the coefficients satisfying a given criterion for the coefficients at the same time?

Here a more complicated example:

$$\frac{x_{1} x_{2} x_{3} x_{4} x_{5} x_{6} x_{7} x_{8} x_{9} x_{10} x_{11} x_{12} x_{13}}{\left(1-\frac{t_{1}}{x_{1} x_{2}}\right) \left(1-\frac{t_{2}}{x_{1} x_{2}}\right) \left(1-\frac{t_{9} x_{1} x_{2}}{x_{4}}\right) \left(1-\frac{t_{3}}{x_{3} x_{4}}\right) \left(1-\frac{t_{4}}{x_{3} x_{4}}\right) \left(1-\frac{t_{11} x_{3} x_{4}}{x_{2}}\right) \left(1-\frac{t_{5}}{x_{5}}\right) \left(1-\frac{t_{6}}{x_{5}}\right) \left(1-\frac{t_{12} x_{2} x_{7}}{x_{9}}\right) \left(1-\frac{t_{7} x_{5} x_{9}}{x_{8}}\right) \left(1-\frac{t_{10} x_{4} x_{6}}{x_{10}}\right) \left(1-\frac{t_{8} x_{5} x_{10}}{x_{11}}\right) \left(1-\frac{t_{13} x_{4} x_{8}}{x_{12}}\right) \left(1-\frac{t_{14} x_{3} x_{12}}{x_{6}}\right) \left(1-\frac{t_{15} x_{2} x_{11}}{x_{13}}\right) \left(1-\frac{t_{16} x_{1} x_{13}}{x_{7}}\right)}$$

and I would like to select only those terms that are multiplied by $$x_{1} x_{2} x_{3} x_{4} x_{5} x_{6} x_{7} x_{8} x_{9} x_{10} x_{11} x_{12} x_{13}$$

• Can you, please, provide a more complicated example that you’d want to deal with? – CA Trevillian Mar 22 at 19:28
• I added a very complicated example that I cannot do on my laptop but I'm doing very slowly computing it on a cluster. – Alessandro Mininno Mar 22 at 21:27
• But that's simple, if you set numerator to 1, you need to pick up terms in the series expansion that are free from $x$. – yarchik Mar 22 at 21:31
• Yes, exactly, I understand, but they must be free from all the x's and this is slow and RAM consuming. I was asking if there was a way to select the coefficients that are free from x while expanding, so that I don't need to drop the ones that contains x's only afterwards. – Alessandro Mininno Mar 22 at 21:50
• As you can see, if I replace the example I gave without the numerator and asking for Coefficient 0 for all the x's, first of all I need to loop over all the x's, so I add a loop, and then it's very RAM consuming the first time I do it. I hope I'm explaining myself. – Alessandro Mininno Mar 22 at 21:52

My idea is as follows.

Start from a given function

f = x[1] x[2]/((1 - h t[1] x[1] x[2]^-1) (1 - h t[2] x[2] x[1]^-1))


and discard the prefactor. Thus we a looking for the terms in the expansion that do not contain x[i]

g = 1/((1 - (h t[1] x[1])/x[2]) (1 - (h t[2] x[2])/x[1])) /. {x[i_] ->y^(1 + 10 i)}
Coefficient[Normal[Series[g, {h, 0, 10}]] /. h -> 1, y, 0]
(* 1 + t[1] t[2] + t[1]^2 t[2]^2 + t[1]^3 t[2]^3 + t[1]^4 t[2]^4 + t[1]^5 t[2]^5*)


The replacement above allows to reduce many variables x[i] to a single one y. Hopefully it will speed up the things.

• I like this solution, I have just a doubt: are we sure that in very complicated examples, the choice of an overall variable y with that power does not produce accidental cancellations? I haven't looked in details why you chose y^(1+10i), so maybe in this way there are possible cancellations, but is there a way to be sure? – Alessandro Mininno Mar 23 at 11:51
• @AlessandroMininno yes, you right about the cancellations. I haven't tried to estimate what would be the correct step, I have chosen 10. In the case of doubts we may want to increase that. – yarchik Mar 23 at 11:53