From: Andrej V. <an...@us...> - 2008-05-27 08:24:25
|
Update of /cvsroot/maxima/maxima/share/contrib/solve_rec In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv3101 Modified Files: simplify_sum.mac rtest_simplify_sum.mac simplify_sum_test.mac Log Message: simplify_sum can be called recursively. Added a test for which this is needed. Index: simplify_sum.mac =================================================================== RCS file: /cvsroot/maxima/maxima/share/contrib/solve_rec/simplify_sum.mac,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- simplify_sum.mac 23 Apr 2008 22:24:13 -0000 1.12 +++ simplify_sum.mac 27 May 2008 08:24:22 -0000 1.13 @@ -47,10 +47,13 @@ put('simplify_sum, 1.0, 'version)$ define_variable(zeilberger_check, true, boolean)$ -define_variable(sum_min, 1, fixnum)$ +define_variable(sum_min, 1, any)$ define_variable(use_hgfred, true, boolean)$ define_variable(use_simpsum, true, boolean)$ +define_variable(simplify_sum_depth, 0, fixnum)$ +define_variable(simplify_sum_max_depth, 3, fixnum)$ + /******************* * * Debugging. @@ -78,8 +81,10 @@ else block( [summand : part(expr, 1), var : part(expr, 2), lo : part(expr, 3), hi : part(expr, 4), - sm1 : expr, linsolvewarn:false], + sm1 : expr, linsolvewarn:false, simplify_sum_depth:simplify_sum_depth+1], + if simplify_sum_depth>simplify_sum_max_depth then return(expr), + /*** Default maxima simplification. *********************************/ if use_simpsum=true then ( ss_print_message(1, "Trying with simpsum=true ..."), @@ -155,7 +160,7 @@ else sm1 : und ), - supcontext(ss_context), + apply(supcontext, [concat('ss_context, simplify_sum_depth)]), /*** Zeilberger algorithm ************************************************/ if errcatch( if not(atom(sm1)) and not freeof_sum(sm1) then ( @@ -167,7 +172,7 @@ if sm1=false then sm1 : apply(sum, [summand, var, lo, hi]), - killcontext('ss_context), + killcontext(concat('ss_context, simplify_sum_depth)), /*** Convert to hypergeometrical functions. ******************************/ if not(atom(sm1)) and not( freeof_sum(sm1) ) and @@ -219,7 +224,7 @@ if length(in_zr)=0 then ( if length(vars)<1 then return(false), if length(listofvars(hi))>0 then %n% : first(listofvars(hi)) - else if length(listofvars(lo))>0 then %n% : first(listofvars(hi)) + else if length(listofvars(lo))>0 then %n% : first(listofvars(lo)) else %n% : vars[1] ) else @@ -238,7 +243,7 @@ if lo=minf then lo : support[1], if hi=inf then hi : support[2], - + ss_print_message(2, "Found support:", support), /* We don't handle sums over infinite support yet! */ @@ -260,13 +265,13 @@ apply(sum, [ minfactorial(expr), %k%, - ceiling(lo), - floor(hi) + lo, /*ceiling(lo),*/ + hi /*floor(hi)*/ ] ) ), %i%, sum_min, sum_min + deg - 2)), - cond : factor(minfactorial(cond)), + cond : factor(minfactorial(simplify_sum(cond))), if not freeof_sum(cond) then ( ss_print_message(3, "Wrong initial conditions:", cond), @@ -356,8 +361,8 @@ block( [%i%, tmp_sum, real_sum, simpsum:true, sum_min:sum_min+deg], for %i%:sum_min thru deg+sum_min do( - real_sum : minfactorial(factcomb(makefact(subst(%n%=%i%, apply(sum, - [expr, %k%, ceiling(lo) , floor(hi)]))))), + real_sum : minfactorial(factcomb(makefact( + simplify_sum(subst(%n%=%i%, apply(sum, [expr, %k%, lo , hi])))))), tmp_sum : minfactorial(factcomb(makefact(subst(%n%=%i%, sm)))), dif : factor(minfactorial(factcomb(real_sum - tmp_sum))), if freeof_sum(tmp_sum) and dif#0 Index: rtest_simplify_sum.mac =================================================================== RCS file: /cvsroot/maxima/maxima/share/contrib/solve_rec/rtest_simplify_sum.mac,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- rtest_simplify_sum.mac 20 May 2008 08:42:29 -0000 1.7 +++ rtest_simplify_sum.mac 27 May 2008 08:24:22 -0000 1.8 @@ -188,6 +188,14 @@ 0; test_sum( + sum(binomial(l+j,j)*(-1)^(l+2*j)*binomial(n+1,l+j+1),l,0,n-j), + [], + true, + [], + 1); +0; + +test_sum( sum((n^2+n+1)/(n^4-2*n^2+1),n,2,inf), [], true, Index: simplify_sum_test.mac =================================================================== RCS file: /cvsroot/maxima/maxima/share/contrib/solve_rec/simplify_sum_test.mac,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- simplify_sum_test.mac 20 May 2008 08:42:29 -0000 1.3 +++ simplify_sum_test.mac 27 May 2008 08:24:22 -0000 1.4 @@ -168,6 +168,13 @@ )$ test_sum( + sum(binomial(l+j,j)*(-1)^(n-l-j)*binomial(n+1,l+j+1),l,0,n-j), + [], + true, + [] +)$ + +test_sum( sum((n^2+n+1)/(n^4-2*n^2+1),n,2,inf), [], true, |