Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Finding residues of a huge multivariable rational function

From my understanding, when computing with huge rational functions, we shouldn't use symbolic expressions. However, I don't see how to find roots and residues without symbolic variables. Here is a small scale example of the issue. I have a rational function that looks like below:

$f(u_1,x_1,u_2,x_2,u_3,x_3) = \frac{1}{{\left(u_{1} u_{2} u_{3} - x_{1} x_{2} x_{3}\right)} {\left(u_{1} u_{2} u_{3} - 1\right)} {\left(u_{1} u_{2} - x_{1} x_{2}\right)} {\left(u_{1} u_{2} - 1\right)} {\left(u_{1} - x_{1}\right)} {\left(u_{1} - 1\right)}}$

First I want to solve for $u_1$ in the denominator and find those roots (poles) that have $x_1$ as below.

Then I will loop through the roots and compute the residue of $f$ w.r.t. $u_1$ at those poles.

u1,u2,u3,x1,x2,x3 = var('u1,u2,u3,x1,x2,x3')  #symbolic variables 
f=1/((u1*u2*u3 - x1*x2*x3)*(u1*u2*u3 - 1)*(u1*u2 - x1*x2)*(u1*u2 - 1)*(u1 - x1)*(u1 - 1))
fden=f.denominator() #denominator of f
list1=fden.roots(u1)    #poles of u1
[root for (root, multiplicity) in list1] #list of roots

The output is

[x1*x2*x3/(u2*u3), x1*x2/u2, x1, 1/(u2*u3), 1/u2, 1]

Then we choose those roots that have $x1$

poles1 = [x1*x2*x3/(u2*u3), x1*x2/u2, x1] #choose those that have x1

Finally, we find the residue of $f$ w.r.t $u1$ of the rational function at the poles containing $x1.$

ans1=0
for ff in poles1:
   tmp=f.residue(u1==ff)
   ans1+=tmp     #ans1 is the residue of f w.r.t u1 at all the poles containing x1
ans1

The output is then

1/((u2*u3*x1 - x1*x2*x3)*(u2*u3*x1 - 1)*(u2*x1 - x1*x2)*(u2*x1 - 1)*(x1 - 1)) - 1/((u3*x1*x2 - x1*x2*x3)*(u3*x1*x2 - 1)* (x1*x2 - 1)*u2*(x1 - x1*x2/u2)*(x1*x2/u2 - 1)) + 1/((x1*x2*x3 - 1)*(x1*x2 - x1*x2*x3/u3)*(x1*x2*x3/u3 - 1)*u2*u3*(x1 x1*x2*x3/(u2*u3))*(x1*x2*x3/(u2*u3) - 1))

Then I replace $f$ with $ans1$ continue to do the same process w.r.t $u2$ and poles containing $x2$ and finally w.r.t $u3$ and poles containing $x3.$ However, this consumes about 800GB of memory on an HPC when I feed it a larger rational function.

Is there a way to find

  1. roots of multivariable polynomials with respect to one variable ?

  2. residue of a rational function avoiding symbolic variables?

Both .roots() and .residue() are not defined for rational functions that are not defined in terms of symbolic variables.

Finding residues of a huge multivariable rational function

From my understanding, when computing with huge rational functions, we shouldn't use symbolic expressions. However, I don't see how to find roots and residues without symbolic variables. Here is a small scale example of the issue. I have a rational function that looks like below:

$f(u_1,x_1,u_2,x_2,u_3,x_3) = \frac{1}{{\left(u_{1} u_{2} u_{3} - x_{1} x_{2} x_{3}\right)} {\left(u_{1} u_{2} u_{3} - 1\right)} {\left(u_{1} u_{2} - x_{1} x_{2}\right)} {\left(u_{1} u_{2} - 1\right)} {\left(u_{1} - x_{1}\right)} {\left(u_{1} - 1\right)}}$

First I want to solve for $u_1$ in the denominator and find those roots (poles) that have $x_1$ as below.

Then I will loop through the roots and compute the residue of $f$ w.r.t. $u_1$ at those poles.

u1,u2,u3,x1,x2,x3 = var('u1,u2,u3,x1,x2,x3')  #symbolic variables 
f=1/((u1*u2*u3 - x1*x2*x3)*(u1*u2*u3 - 1)*(u1*u2 - x1*x2)*(u1*u2 - 1)*(u1 - x1)*(u1 - 1))
fden=f.denominator() #denominator of f
list1=fden.roots(u1)    #poles of u1
[root for (root, multiplicity) in list1] #list of roots

The output is

[x1*x2*x3/(u2*u3), x1*x2/u2, x1, 1/(u2*u3), 1/u2, 1]

Then we choose those roots that have $x1$

poles1 = [x1*x2*x3/(u2*u3), x1*x2/u2, x1] #choose those that have x1

Finally, we find the residue of $f$ w.r.t $u1$ of the rational function at the poles containing $x1.$

ans1=0
for ff in poles1:
   tmp=f.residue(u1==ff)
   ans1+=tmp     #ans1 is the residue of f w.r.t u1 at all the poles containing x1
ans1

The output is then

1/((u2*u3*x1 - x1*x2*x3)*(u2*u3*x1 - 1)*(u2*x1 - x1*x2)*(u2*x1 - 1)*(x1 - 1)) - 1/((u3*x1*x2 - x1*x2*x3)*(u3*x1*x2 - 1)* (x1*x2 - 1)*u2*(x1 - x1*x2/u2)*(x1*x2/u2 - 1)) + 1/((x1*x2*x3 - 1)*(x1*x2 - x1*x2*x3/u3)*(x1*x2*x3/u3 - 1)*u2*u3*(x1 x1*x2*x3/(u2*u3))*(x1*x2*x3/(u2*u3) - 1))

Then I replace $f$ with $ans1$ to continue to do the same process w.r.t $u2$ and poles containing $x2$ and finally w.r.t $u3$ and poles containing $x3.$ However, this consumes about 800GB of memory on an HPC when I feed it a larger rational function.

Is there a way to find

  1. roots of multivariable polynomials with respect to one variable ?

  2. residue of a rational function avoiding symbolic variables?

Both .roots() and .residue() are not defined for rational functions that are not defined in terms of symbolic variables.

Finding residues of a huge multivariable rational function

From my understanding, when computing with huge rational functions, we shouldn't use symbolic expressions. variables. However, I don't see how to find roots and residues without symbolic variables. Here is a small scale example of the issue. I have a rational function that looks like below:

$f(u_1,x_1,u_2,x_2,u_3,x_3) = \frac{1}{{\left(u_{1} u_{2} u_{3} - x_{1} x_{2} x_{3}\right)} {\left(u_{1} u_{2} u_{3} - 1\right)} {\left(u_{1} u_{2} - x_{1} x_{2}\right)} {\left(u_{1} u_{2} - 1\right)} {\left(u_{1} - x_{1}\right)} {\left(u_{1} - 1\right)}}$

First I want to solve for $u_1$ in the denominator and find those roots (poles) that have $x_1$ as below.

Then I will loop through the roots and compute the residue of $f$ w.r.t. $u_1$ at those poles.

u1,u2,u3,x1,x2,x3 = var('u1,u2,u3,x1,x2,x3')  #symbolic variables 
f=1/((u1*u2*u3 - x1*x2*x3)*(u1*u2*u3 - 1)*(u1*u2 - x1*x2)*(u1*u2 - 1)*(u1 - x1)*(u1 - 1))
fden=f.denominator() #denominator of f
list1=fden.roots(u1)    #poles of u1
[root for (root, multiplicity) in list1] #list of roots

The output is

[x1*x2*x3/(u2*u3), x1*x2/u2, x1, 1/(u2*u3), 1/u2, 1]

Then we choose those roots that have $x1$

poles1 = [x1*x2*x3/(u2*u3), x1*x2/u2, x1] #choose those that have x1

Finally, we find the residue of $f$ w.r.t $u1$ of the rational function at the poles containing $x1.$

ans1=0
for ff in poles1:
   tmp=f.residue(u1==ff)
   ans1+=tmp     #ans1 is the residue of f w.r.t u1 at all the poles containing x1
ans1

The output is then

1/((u2*u3*x1 - x1*x2*x3)*(u2*u3*x1 - 1)*(u2*x1 - x1*x2)*(u2*x1 - 1)*(x1 - 1)) - 1/((u3*x1*x2 - x1*x2*x3)*(u3*x1*x2 - 1)* (x1*x2 - 1)*u2*(x1 - x1*x2/u2)*(x1*x2/u2 - 1)) + 1/((x1*x2*x3 - 1)*(x1*x2 - x1*x2*x3/u3)*(x1*x2*x3/u3 - 1)*u2*u3*(x1 x1*x2*x3/(u2*u3))*(x1*x2*x3/(u2*u3) - 1))

Then I replace $f$ with $ans1$ to continue to do the same process w.r.t $u2$ and poles containing $x2$ and finally w.r.t $u3$ and poles containing $x3.$ However, this consumes about 800GB of memory on an HPC when I feed it a larger rational function.

Is there a way to find

  1. roots of multivariable polynomials with respect to one variable ?variable?

  2. residue of a rational function avoiding symbolic variables?

Both .roots() and .residue() are not defined for rational functions that are not defined in terms of symbolic variables.

Finding residues of a huge multivariable rational function

From my understanding, when computing with huge rational functions, we shouldn't use symbolic variables. However, I don't see how to find roots and residues without symbolic variables. Here is a small scale example of the issue. I have a rational function that looks like below:

$f(u_1,x_1,u_2,x_2,u_3,x_3) = \frac{1}{{\left(u_{1} u_{2} u_{3} - x_{1} x_{2} x_{3}\right)} {\left(u_{1} u_{2} u_{3} - 1\right)} {\left(u_{1} u_{2} - x_{1} x_{2}\right)} {\left(u_{1} u_{2} - 1\right)} {\left(u_{1} - x_{1}\right)} {\left(u_{1} - 1\right)}}$

First I want to solve for $u_1$ in the denominator and find those roots (poles) that have $x_1$ as below.

Then I will loop through the roots and compute the residue of $f$ w.r.t. $u_1$ at those poles.

u1,u2,u3,x1,x2,x3 = var('u1,u2,u3,x1,x2,x3')  #symbolic variables 
f=1/((u1*u2*u3 - x1*x2*x3)*(u1*u2*u3 - 1)*(u1*u2 - x1*x2)*(u1*u2 - 1)*(u1 - x1)*(u1 - 1))
fden=f.denominator() #denominator of f
list1=fden.roots(u1)    #poles of u1
[root for (root, multiplicity) in list1] #list of roots

The output is

[x1*x2*x3/(u2*u3), x1*x2/u2, x1, 1/(u2*u3), 1/u2, 1]

Then we choose those roots that have $x1$

poles1 = [x1*x2*x3/(u2*u3), x1*x2/u2, x1] #choose those that have x1

Finally, we find the residue of $f$ w.r.t $u1$ of the rational function at the poles containing $x1.$

ans1=0
for ff in poles1:
   tmp=f.residue(u1==ff)
   ans1+=tmp     #ans1 is the residue of f w.r.t u1 at all the poles containing x1
ans1

The output is then

1/((u2*u3*x1 - x1*x2*x3)*(u2*u3*x1 - 1)*(u2*x1 - x1*x2)*(u2*x1 - 1)*(x1 - 1)) - 1/((u3*x1*x2 - x1*x2*x3)*(u3*x1*x2 - 1)* (x1*x2 - 1)*u2*(x1 - x1*x2/u2)*(x1*x2/u2 - 1)) + 1/((x1*x2*x3 - 1)*(x1*x2 - x1*x2*x3/u3)*(x1*x2*x3/u3 - 1)*u2*u3*(x1 x1*x2*x3/(u2*u3))*(x1*x2*x3/(u2*u3) - 1))

Then I replace $f$ with $ans1$ to continue to do the same process w.r.t $u2$ and poles containing $x2$ and finally w.r.t $u3$ and poles containing $x3.$ However, this consumes about 800GB of memory on an HPC when I feed it a larger rational function.

Is there a way to find

  1. roots of multivariable polynomials with respect to one variable?

  2. residue of a rational function avoiding symbolic variables?

Both .roots() and .residue() are not defined for rational functions that are not defined in terms of symbolic variables.

Finding residues of a huge Roots of multivariable rational functionpolynomials with respect to one variable?

From my understanding, when computing with huge rational functions, we shouldn't use symbolic variables. However, I don't see how to find roots and residues without symbolic variables. Here is a small scale example of the issue. I have a rational function that looks like below:

$f(u_1,x_1,u_2,x_2,u_3,x_3) = \frac{1}{{\left(u_{1} u_{2} u_{3} - x_{1} x_{2} x_{3}\right)} {\left(u_{1} u_{2} u_{3} - 1\right)} {\left(u_{1} u_{2} - x_{1} x_{2}\right)} {\left(u_{1} u_{2} - 1\right)} {\left(u_{1} - x_{1}\right)} {\left(u_{1} - 1\right)}}$

First I want to solve for $u_1$ in the denominator and find those roots (poles) that have $x_1$ as below.

Then I will loop through the roots and compute the residue of $f$ w.r.t. $u_1$ at those poles.

u1,u2,u3,x1,x2,x3 = var('u1,u2,u3,x1,x2,x3')  #symbolic variables 
f=1/((u1*u2*u3 - x1*x2*x3)*(u1*u2*u3 - 1)*(u1*u2 - x1*x2)*(u1*u2 - 1)*(u1 - x1)*(u1 - 1))
fden=f.denominator() #denominator of f
list1=fden.roots(u1)    #poles of u1
[root for (root, multiplicity) in list1] #list of roots

The output is

[x1*x2*x3/(u2*u3), x1*x2/u2, x1, 1/(u2*u3), 1/u2, 1]

Then we choose those roots that have $x1$

poles1 = [x1*x2*x3/(u2*u3), x1*x2/u2, x1] #choose those that have x1

Finally, we find the residue of $f$ w.r.t $u1$ of the rational function at the poles containing $x1.$

ans1=0
for ff in poles1:
   tmp=f.residue(u1==ff)
   ans1+=tmp     #ans1 is the residue of f w.r.t u1 at all the poles containing x1
ans1

The output is then

1/((u2*u3*x1 - x1*x2*x3)*(u2*u3*x1 - 1)*(u2*x1 - x1*x2)*(u2*x1 - 1)*(x1 - 1)) - 1/((u3*x1*x2 - x1*x2*x3)*(u3*x1*x2 - 1)* (x1*x2 - 1)*u2*(x1 - x1*x2/u2)*(x1*x2/u2 - 1)) + 1/((x1*x2*x3 - 1)*(x1*x2 - x1*x2*x3/u3)*(x1*x2*x3/u3 - 1)*u2*u3*(x1 x1*x2*x3/(u2*u3))*(x1*x2*x3/(u2*u3) - 1))

Then I replace $f$ with $ans1$ to continue to do the same process w.r.t $u2$ and poles containing $x2$ and finally w.r.t $u3$ and poles containing $x3.$ However, this consumes about 800GB of memory on an HPC when I feed it a larger rational function.

Is there a way to find

  1. roots of multivariable polynomials with respect to one variable?

  2. residue of a rational function avoiding symbolic variables?

Both .roots() and .residue() are not defined for rational functions that are not defined in terms of symbolic variables.

Roots of multivariable polynomials with respect to one variable?

This question was previously titled "Finding residues of a huge multivariable rational function."

From my understanding, when computing with huge rational functions, we shouldn't use symbolic variables. However, I don't see how to find roots and residues without symbolic variables. Here is a small scale example of the issue. I have a rational function that looks like below:

$f(u_1,x_1,u_2,x_2,u_3,x_3) = \frac{1}{{\left(u_{1} u_{2} u_{3} - x_{1} x_{2} x_{3}\right)} {\left(u_{1} u_{2} u_{3} - 1\right)} {\left(u_{1} u_{2} - x_{1} x_{2}\right)} {\left(u_{1} u_{2} - 1\right)} {\left(u_{1} - x_{1}\right)} {\left(u_{1} - 1\right)}}$

First I want to solve for $u_1$ in the denominator and find those roots (poles) that have $x_1$ as below.

Then I will loop through the roots and compute the residue of $f$ w.r.t. $u_1$ at those poles.

u1,u2,u3,x1,x2,x3 = var('u1,u2,u3,x1,x2,x3')  #symbolic variables 
f=1/((u1*u2*u3 - x1*x2*x3)*(u1*u2*u3 - 1)*(u1*u2 - x1*x2)*(u1*u2 - 1)*(u1 - x1)*(u1 - 1))
fden=f.denominator() #denominator of f
list1=fden.roots(u1)    #poles of u1
[root for (root, multiplicity) in list1] #list of roots

The output is

[x1*x2*x3/(u2*u3), x1*x2/u2, x1, 1/(u2*u3), 1/u2, 1]

Then we choose those roots that have $x1$

poles1 = [x1*x2*x3/(u2*u3), x1*x2/u2, x1] #choose those that have x1

Finally, we find the residue of $f$ w.r.t $u1$ of the rational function at the poles containing $x1.$

ans1=0
for ff in poles1:
   tmp=f.residue(u1==ff)
   ans1+=tmp     #ans1 is the residue of f w.r.t u1 at all the poles containing x1
ans1

The output is then

1/((u2*u3*x1 - x1*x2*x3)*(u2*u3*x1 - 1)*(u2*x1 - x1*x2)*(u2*x1 - 1)*(x1 - 1)) - 1/((u3*x1*x2 - x1*x2*x3)*(u3*x1*x2 - 1)* (x1*x2 - 1)*u2*(x1 - x1*x2/u2)*(x1*x2/u2 - 1)) + 1/((x1*x2*x3 - 1)*(x1*x2 - x1*x2*x3/u3)*(x1*x2*x3/u3 - 1)*u2*u3*(x1 x1*x2*x3/(u2*u3))*(x1*x2*x3/(u2*u3) - 1))

Then I replace $f$ with $ans1$ to continue to do the same process w.r.t $u2$ and poles containing $x2$ and finally w.r.t $u3$ and poles containing $x3.$ However, this consumes about 800GB of memory on an HPC when I feed it a larger rational function.

Is there a way to find

  1. roots of multivariable polynomials with respect to one variable?

  2. residue of a rational function avoiding symbolic variables?

Both .roots() and .residue() are not defined for rational functions that are not defined in terms of symbolic variables.