@@ -451,6 +451,8 @@ def symbolic_sum(expression, v, a, b, algorithm='maxima', hold=False):
451
451
452
452
- ``'giac'`` - (optional) use Giac
453
453
454
+ - ``'sympy'`` - use SymPy
455
+
454
456
- ``hold`` - (default: ``False``) if ``True`` don't evaluate
455
457
456
458
EXAMPLES::
@@ -554,6 +556,22 @@ def symbolic_sum(expression, v, a, b, algorithm='maxima', hold=False):
554
556
sage: symbolic_sum(1/(1+k^2), k, -oo, oo, algorithm = 'giac') # optional - giac
555
557
(pi*e^(2*pi) - pi*e^(-2*pi))/(e^(2*pi) + e^(-2*pi) - 2)
556
558
559
+ SymPy can't solve that summation::
560
+
561
+ sage: symbolic_sum(1/(1+k^2), k, -oo, oo, algorithm = 'sympy')
562
+ Traceback (most recent call last):
563
+ ...
564
+ AttributeError: Unable to convert SymPy result (=Sum(1/(k**2 + 1),
565
+ (k, -oo, oo))) into Sage
566
+
567
+ But SymPy can do this one for which Maxima is broken (see
568
+ :trac:`22005`)::
569
+
570
+ sage: sum(1/((2*n+1)^2-4)^2, n, 0, Infinity, algorithm='sympy')
571
+ 1/64*pi^2
572
+ sage: sum(1/((2*n+1)^2-4)^2, n, 0, Infinity)
573
+ 1/64*pi^2 - 1/12
574
+
557
575
Use Maple as a backend for summation::
558
576
559
577
sage: symbolic_sum(binomial(n,k)*x^k, k, 0, n, algorithm = 'maple') # optional - maple
@@ -632,6 +650,16 @@ def symbolic_sum(expression, v, a, b, algorithm='maxima', hold=False):
632
650
raise ValueError ("Giac cannot make sense of: %s" % sum )
633
651
return result .sage ()
634
652
653
+ elif algorithm == 'sympy' :
654
+ expression ,v ,a ,b = [expr ._sympy_ () for expr in (expression , v , a , b )]
655
+ from sympy import summation
656
+ result = summation (expression , (v , a , b ))
657
+ try :
658
+ return result ._sage_ ()
659
+ except AttributeError :
660
+ raise AttributeError ("Unable to convert SymPy result (={}) into"
661
+ " Sage" .format (result ))
662
+
635
663
else :
636
664
raise ValueError ("unknown algorithm: %s" % algorithm )
637
665
0 commit comments