Ticket #6636: trac_6636-factorial-simplify.patch

File trac_6636-factorial-simplify.patch, 3.3 KB (added by kcrisman, 4 years ago)

Needs #6197

  • sage/symbolic/expression.pyx

    # HG changeset patch
    # User Karl-Dieter Crisman <kcrisman@gmail.com>
    # Date 1252418006 14400
    # Node ID d8ea9591840748adf3616654ae1367f16514bd78
    # Parent  81cbc5d22a61e09a1bcc15f2d198b3d8861f79ab
    Exposes Maxima functionality of simplifying factorials and binomials, trac 6636
    
    diff -r 81cbc5d22a61 -r d8ea95918407 sage/symbolic/expression.pyx
    a b  
    50595059        .. seealso:: 
    50605060 
    50615061           :meth:`simplify_full`, :meth:`simplify_trig`, 
    5062            :meth:`simplify_rational`, :meth:`simplify_radical` 
     5062           :meth:`simplify_rational`, :meth:`simplify_radical`, 
     5063           :meth:`simplify_factorial` 
    50635064 
    50645065        EXAMPLES:: 
    50655066 
     
    50725073     
    50735074    def simplify_full(self): 
    50745075        """ 
    5075         Applies simplify_trig, simplify_rational, and simplify_radical 
     5076        Applies simplify_factorial, simplify_trig, simplify_rational, and simplify_radical 
    50765077        to self (in that order). 
    50775078         
    50785079        ALIAS: simplify_full and full_simplify are the same. 
     
    50945095            sage: f = sin(x/(x^2 + x)) 
    50955096            sage: f.simplify_full() 
    50965097            sin(1/(x + 1)) 
     5098 
     5099        :: 
     5100 
     5101            sage: var('n,k') 
     5102            (n, k) 
     5103            sage: f = binomial(n,k)*factorial(k)*factorial(n-k) 
     5104            sage: f.simplify_full() 
     5105            factorial(n) 
    50975106        """ 
    50985107        x = self 
     5108        x = x.simplify_factorial() 
    50995109        x = x.simplify_trig() 
    51005110        x = x.simplify_rational() 
    51015111        x = x.simplify_radical() 
     
    51555165    # TODO: come up with a way to intelligently wrap Maxima's way of 
    51565166    # fine-tuning all simplificationsrational 
    51575167 
     5168    def simplify_factorial(self): 
     5169        """ 
     5170        Simplify by combining expressions with factorials, and by  
     5171        expanding binomials into factorials. 
     5172         
     5173        ALIAS: factorial_simplify and simplify_factorial are the same 
     5174         
     5175        EXAMPLES: 
     5176 
     5177        Some examples are relatively clear:: 
     5178         
     5179            sage: var('n,k') 
     5180            (n, k) 
     5181            sage: f = factorial(n+1)/factorial(n); f 
     5182            factorial(n + 1)/factorial(n) 
     5183            sage: f.simplify_factorial() 
     5184            n + 1 
     5185 
     5186        :: 
     5187            sage: f = factorial(n)*(n+1); f 
     5188            (n + 1)*factorial(n) 
     5189            sage: simplify(f) 
     5190            (n + 1)*factorial(n) 
     5191            sage: f.simplify_factorial() 
     5192            factorial(n + 1) 
     5193 
     5194        :: 
     5195 
     5196            sage: f = binomial(n,k)*factorial(k)*factorial(n-k); f 
     5197            factorial(-k + n)*factorial(k)*binomial(n,k) 
     5198            sage: f.simplify_factorial() 
     5199            factorial(n) 
     5200         
     5201        A more complicated example, which needs further processing:: 
     5202 
     5203            sage: f = factorial(x)/factorial(x-2)/2 + factorial(x+1)/factorial(x)/2; f 
     5204            1/2*factorial(x)/factorial(x - 2) + 1/2*factorial(x + 1)/factorial(x) 
     5205            sage: g = f.simplify_factorial(); g 
     5206            1/2*(x - 1)*x + 1/2*x + 1/2 
     5207            sage: g.simplify_rational() 
     5208            1/2*x^2 + 1/2 
     5209        """ 
     5210        return self.parent()(self._maxima_().makefact().factcomb().minfactorial()) 
     5211 
     5212    factorial_simplify = simplify_factorial 
     5213 
    51585214    def simplify_radical(self): 
    51595215        r""" 
    51605216        Simplifies this symbolic expression, which can contain logs,