1 | initial version |
Your unexpectedd result is not about SR(1)
, it comes from the fact that, when k=0
, F
equals -1/(x - 1)
, which is not a sum, but a product of -1
with -1/(x - 1)
, hence there are two operands for the mul
operator. If you want to see it as the sum of a single fraction, a possible trick could be to add an independent variable y
to ensure that you do not have a trivial sum, and then remove it from the list of operands:
from sage.calculus.calculus import symbolic_sum
x, j = SR.var('x, j')
y = SR.var('y')
assume(abs(x)<1)
M = [SR(1), x, x^2 + 1, x^3 + 3*x, x^4 + 6*x^2 + 2, x^5 + 10*x^3 + 10*x]
for k in range(len(M)):
p = symbolic_sum(x^j*M[k](x=j), j, 0, oo)
F = p.partial_fraction() + y
fractions = F.operands()
fractions.remove(y)
print [k], [numerator(f) for f in fractions]
You should get what you expected:
[0] [-1]
[1] [1, 1]
[2] [-2, -3, -2]
[3] [4, 10, 12, 6]
[4] [-9, -33, -62, -60, -24]
[5] [21, 111, 300, 450, 360, 120]
2 | No.2 Revision |
Your unexpectedd result is not about SR(1)
, it comes from the fact that, when k=0
, F
equals -1/(x - 1)
, which is not a sum, but a product of -1
with
, hence there are two operands for the -1/(x 1/(x - 1)mul
operator. If you want to see it as the sum of a single fraction, a possible trick could be to add an independent variable y
to ensure that you do not have a trivial sum, and then remove it from the list of operands:
from sage.calculus.calculus import symbolic_sum
x, j = SR.var('x, j')
y = SR.var('y')
assume(abs(x)<1)
M = [SR(1), x, x^2 + 1, x^3 + 3*x, x^4 + 6*x^2 + 2, x^5 + 10*x^3 + 10*x]
for k in range(len(M)):
p = symbolic_sum(x^j*M[k](x=j), j, 0, oo)
F = p.partial_fraction() + y
fractions = F.operands()
fractions.remove(y)
print [k], [numerator(f) for f in fractions]
You should get what you expected:
[0] [-1]
[1] [1, 1]
[2] [-2, -3, -2]
[3] [4, 10, 12, 6]
[4] [-9, -33, -62, -60, -24]
[5] [21, 111, 300, 450, 360, 120]
3 | No.3 Revision |
Your unexpectedd result is not about SR(1)
, it comes from the fact that, when k=0
, F
equals -1/(x - 1)
, which is not a sum, but a product of -1
with 1/(x - 1)
, hence there are you got the two operands for of the mul
operator. If you want to see it -1/(x - 1)
as the sum of a single fraction, a possible trick could be to add an independent variable y
to ensure that you do not have a trivial sum, and then remove it from the list of operands:
from sage.calculus.calculus import symbolic_sum
x, j = SR.var('x, j')
y = SR.var('y')
assume(abs(x)<1)
M = [SR(1), x, x^2 + 1, x^3 + 3*x, x^4 + 6*x^2 + 2, x^5 + 10*x^3 + 10*x]
for k in range(len(M)):
p = symbolic_sum(x^j*M[k](x=j), j, 0, oo)
F = p.partial_fraction() + y
fractions = F.operands()
fractions.remove(y)
print [k], [numerator(f) for f in fractions]
You should get what you expected:
[0] [-1]
[1] [1, 1]
[2] [-2, -3, -2]
[3] [4, 10, 12, 6]
[4] [-9, -33, -62, -60, -24]
[5] [21, 111, 300, 450, 360, 120]
4 | No.4 Revision |
Your unexpectedd result is not about SR(1)
, it comes from the fact that, when k=0
, F
equals -1/(x - 1)
, which is not a sum, but a product of -1
with 1/(x - 1)
, hence you got the two operands of the mul
operator. If you want to see -1/(x - 1)
as the sum of a single fraction, a possible trick could be to add an independent variable y
to ensure that you do not have a trivial sum, and then remove it from the list of operands:
from sage.calculus.calculus import symbolic_sum
x, j = SR.var('x, j')
y = SR.var('y')
assume(abs(x)<1)
M = [SR(1), x, x^2 + 1, x^3 + 3*x, x^4 + 6*x^2 + 2, x^5 + 10*x^3 + 10*x]
for k in range(len(M)):
p = symbolic_sum(x^j*M[k](x=j), j, 0, oo)
F = p.partial_fraction() + y
fractions = F.operands()
fractions.remove(y)
print [k], [numerator(f) for f in fractions]
F.operands() if f != y]
You should get what you expected:
[0] [-1]
[1] [1, 1]
[2] [-2, -3, -2]
[3] [4, 10, 12, 6]
[4] [-9, -33, -62, -60, -24]
[5] [21, 111, 300, 450, 360, 120]
5 | No.5 Revision |
Your unexpectedd result is not about SR(1)
, it comes from the fact that, when k=0
, F
equals -1/(x - 1)
, which is not a sum, but a product of -1
with 1/(x - 1)
, hence you got the two operands of the mul
operator. If you want to see -1/(x - 1)
as the sum of a single fraction, a possible trick could be to add an independent variable y
to ensure that you do not have a trivial sum, and then remove it from the list of operands:
from sage.calculus.calculus import symbolic_sum
x, j = SR.var('x, j')
y = SR.var('y')
assume(abs(x)<1)
M = [SR(1), x, x^2 + 1, x^3 + 3*x, x^4 + 6*x^2 + 2, x^5 + 10*x^3 + 10*x]
for k in range(len(M)):
p = symbolic_sum(x^j*M[k](x=j), j, 0, oo)
F = p.partial_fraction() + y
print [k], [numerator(f) for f in F.operands() if f != y]
You should get what you expected:
[0] [-1]
[1] [1, 1]
[2] [-2, -3, -2]
[3] [4, 10, 12, 6]
[4] [-9, -33, -62, -60, -24]
[5] [21, 111, 300, 450, 360, 120]
That said, if you want to avoid to have to substitute x
with j
in 1
(which requires using SR(1)
and not ZZ(1)
for which the substitution is not defined), why not using j
directly in M
?
from sage.calculus.calculus import symbolic_sum
x, j = SR.var('x, j')
y = SR.var('y')
assume(abs(x)<1)
M = [1, j, j^2 + 1, j^3 + 3*j, j^4 + 6*j^2 + 2, j^5 + 10*j^3 + 10*j]
for k in range(len(M)):
p = symbolic_sum(x^j*M[k], j, 0, oo)
F = p.partial_fraction() + y
print [k], [numerator(f) for f in F.operands() if f != y]
While we are at it, instead of counting elements of M
, iterate over the integer k
, and use the k
-th element of M
, note that you can enumerate elements of M
directly:
from sage.calculus.calculus import symbolic_sum
x, j = SR.var('x, j')
y = SR.var('y')
assume(abs(x)<1)
M = [1, j, j^2 + 1, j^3 + 3*j, j^4 + 6*j^2 + 2, j^5 + 10*j^3 + 10*j]
for k, m in enumerate(M):
p = symbolic_sum(x^j*m, j, 0, oo)
F = p.partial_fraction() + y
print [k], [numerator(f) for f in F.operands() if f != y]