Fix some issues with make dist-gzip
[maxima.git] / share / solve_rec / rtest_simplify_sum.mac
blob5798a9855a7a956658354d8d29c6769b653ea505
1 /***************************************
2  *
3  * This file contains some examples for simplify_sum function
4  *
5  * Use:
6  *   batch("rtest_simplify_sum.mac", test);
7  *
8  ***************************************/
10   kill(all),
11   load (simplify_sum),
12   test_sum(sm, ass, use_gamma, smp, ans) := block(
13     [product_use_gamma : use_gamma, cs, f],
14     if length(ass)>0 then apply(assume, ass),
15     cs : simplify_sum(sm),
16     for f in smp do cs : apply(f, [cs]),
17     if length(ass)>0 then apply(forget, ass),
18     ratsimp(cs-ans)),
19   0
23 test_sum(
24   sum(r/k*binomial(n,r)*binomial(m,k-r)/binomial(n+m,k),r,0,k),
25   [n>k, m>k-1, m>k],
26   true,
27   [makefact, minfactorial],
28   n/(n+m));
31 test_sum(
32   sum(binomial(n,k)/(k+1), k, 0, n),
33   [],
34   true,
35   [],
36   (2^(n+1)-1)/(n+1));
39 test_sum(
40   sum((-1)^k * binomial(a+b, a+k) * binomial(b+c, b+k) * binomial(c+a, c+k), k, -a, a),
41   [a<b, a<c],
42   true,
43   [factcomb],
44   (c+b+a)!/(a!*b!*c!));
47 test_sum(
48   sum((-1)^k * binomial(n,k)*x/(x+k), k, 0, n),
49   [],
50   true,
51   [factcomb],
52   (n!*x!)/(x+n)!);
55 test_sum(
56   sum((-1)^k * binomial(2*n, k)^2, k, 0, 2*n),
57   [],
58   false,
59   [],
60   ((product(2*%j1-1,%j1,1,n))*(-1)^n*2^n)/n!);
63 test_sum(
64   sum((binomial(3*k+1,k)*binomial(3*(n-k),n-k))/(3*k+1), k, 0, n),
65   [],
66   false,
67   [],
68   ((product(3*%j1-1,%j1,1,n))*(product(3*%j1+1,%j1,1,n))*3^n)/((product(2*%j1+1,%j1,1,n))*2^n*n!));
71 test_sum(
72   sum(binomial(n, k) * binomial(m, r - k), k, 0, r),
73   [m>r, n>r],
74   true,
75   [factcomb],
76   (n+m)!/((-r+n+m)!*r!));
79 test_sum(
80   sum(binomial(2*n,2*k), k, 0, n),
81   [n>0],
82   true,
83   [],
84   2^(2*n)/2);
87 test_sum(
88   sum((-1)^k*binomial(x-2*k,n-k)*binomial(x-k+1,k),k,0,n),
89   [x>2*n, x>2*n-1, x>n-1],
90   true,
91   [],
92   ((-1)^n+1)/2);
95 test_sum(
96   sum((-1)^s*binomial(2*m, s)^3, s, 0, 2*m),
97   [],
98   false,
99   [],
100   (product(3*%j1-2,%j1,1,m)*product(3*%j1-1,%j1,1,m)*(-1)^m*3^m)/m!^2);
103 test_sum(
104   sum((-1)^k*binomial(k,n-k), k, 0, n),
105   [],
106   true,
107   [rectform, trigreduce],
108   (3*cos((2*%pi*n)/3)-sqrt(3)*sin((2*%pi*n)/3))/3);
111 test_sum(
112   sum(binomial(n,k)^2*binomial(3*n+k,2*n), k, -inf, inf),
113   [n>0],
114   false,
115   [],
116   (product(3*%j1-2,%j1,1,n))^2*(product(3*%j1-1,%j1,1,n))^2*9^n/((product(2*%j1-1,%j1,1,n))^2*4^n*n!^2));
119 test_sum(
120   sum((-1)^k*binomial(n-k,k)*2^(n-2*k), k, 0, n),
121   [],
122   true,
123   [],
124   n+1);
127 test_sum(
128   sum(binomial(x,k)*binomial(y,k), k, 0, y),
129   [x>y],
130   true,
131   [factcomb],
132   (y+x)!/(x!*y!));
135 test_sum(
136   sum((-1)^(n-k)*binomial(n,k)*binomial(k+b,k), k, 0, n),
137   [b>0],
138   true,
139   [factcomb],
140   b!/((b-n)!*n!));
143 test_sum(
144   sum(binomial(n+k,k)/2^k,k,0,n),
145   [],
146   true,
147   [],
148   2^n);
151 test_sum(
152   sum((2^(4*k)*binomial(2*n-2*k,n-k))/(2*k*(2*k+1)*binomial(2*k,k)), k, 1, n),
153   [],
154   true,
155   [],
156   -(4*binomial(-2*(1-n),n-1)*(1-2*n))/(2*n+1));
159 test_sum(
160   sum(k^2 * binomial(n, k), k, 1, n),
161   [],
162   true,
163   [],
164   (n+n^2)*2^n/4);
167 test_sum(
168   sum(2^(n-k)*binomial(n+k,2*k),k,-inf,inf),
169   [n>0],
170   true,
171   [],
172   (2*4^n+1)/3);
175 test_sum(
176   sum(((-1)^k*binomial(2*k,k)*binomial(n,k))/4^k,k,0,n),
177   [],
178   true,
179   [],
180   ((2*n-1)/2)!/(sqrt(%pi)*n!));
183 test_sum(
184   sum((-1)^k*binomial(2*k,k)*binomial(2*n,k)*binomial(4*n-2*k,2*n-k),k,0,2*n),
185   [],
186   true,
187   [],
188   (4^n*2^(2*n)*((2*n-1)/2)!^2)/(%pi*n!^2));
191 test_sum(
192   sum(binomial(l+j,j)*(-1)^(l+2*j)*binomial(n+1,l+j+1),l,0,n-j),
193   [j>1],
194   true,
195   [],
196   1);
199 test_sum(
200   sum(binomial(n,4*k),k,0,inf),
201   [],
202   true,
203   [rectform],
204   (2*2^(n/2)*cos((%pi*n)/4)+2^n)/4
205   ), sum_min=1;
208 (declare(n, integer), load(orthopoly), 0);
211 test_sum(
212   niceindices(sum(binomial(n, k)/binomial(2*n, k)/k!*(2*x)^k, k, 0, inf)),
213   [n>0],
214   true,
215   [lambda([u], niceindices(ev(u, gen_laguerre)))],
216   niceindices((-1)^n*gen_laguerre(n,-2*n-1,2*x)/binomial(2*n,n))
217   );
220 (kill(n), 0);
223 test_sum(
224   sum(binomial(n,i)*p^i*(1-p)^(n-i),i,0,n),
225   [],
226   true,
227   [],
228   1);
231 test_sum(
232   sum(binomial(n,k)*binomial(k-1,j)*(-1)^(k-j-1), k, j+1, n),
233   [j>1],
234   true,
235   [],
236   1);
239 test_sum(
240   sum((n^2+n+1)/(n^4-2*n^2+1),n,2,inf),
241   [],
242   true,
243   [ratsimp, multthru],
244   %pi^2/6-5/16);
247 test_sum(
248   sum(1/n/(2*n+1),n,1,inf),
249   [],
250   true,
251   [ratsimp, multthru],
252   2-2*log(2));
255 test_sum(
256   sum(1/(5*n^2-1),n,1,inf),
257   [],
258   true,
259   [ratsimp, multthru],
260   (sqrt(5)*harmonic_number(1/sqrt(5))-sqrt(5)*harmonic_number(-1/sqrt(5)))/10);
263 test_sum(
264   sum(1/(5*n^2-3),n,1,inf),
265   [],
266   true,
267   [radcan],
268   (sqrt(3)*sqrt(5)*harmonic_number((sqrt(3)/sqrt(5)))-sqrt(3)*sqrt(5)*harmonic_number(-(sqrt(3)/sqrt(5))))/30);
271 test_sum(
272   sum(1/(n^2+1),n,1,inf),
273   [],
274   true,
275   [ratsimp, multthru],
276   -(%i*harmonic_number(%i)-%i*harmonic_number(-%i))/2);
279 test_sum(
280   sum(1/n/(n+a), n, 1, inf),
281   [],
282   true,
283   [ratsimp, multthru],
284   harmonic_number(a)/a);
287 test_sum(
288   sum(1/(5*k+1)^2,k,2,inf),
289   [],
290   false,
291   [],
292   (psi[1](1/5)-925/36)/25);
295 test_sum(
296   sum((-1)^(n+1)/n, n, 1, inf),
297   [],
298   true,
299   [ratsimp, multthru],
300   log(2));
303 test_sum(
304   sum((-1)^k*(k+5)/(2*k+1)/(2*k+3), k, 1, inf),
305   [],
306   true,
307   [ratsimp, multthru],
308   %pi-41/12);
311 test_sum(
312   sum((-1)^(k+1)/(2*k-1)^3, k, 1, inf),
313   [],
314   true,
315   [ratsimp, multthru],
316   %pi^3/32);
319 test_sum(
320   sum(x^n/n!, n, 0, inf),
321   [],
322   false,
323   [],
324   %e^x
328 test_sum(
329   -sum(((-1)^i*x^(2*i))/i,i,1,inf),
330   [],
331   false,
332   [],
333   log(x^2+1)
337 test_sum(
338   sum(n/((n+1)*2^n),n,1,inf),
339   [],
340   false,
341   [ratsimp],
342   2-2*log(2)
346 test_sum(
347   sum(n/((2*n+1)*2^n),n,0,inf),
348   [],
349   false,
350   [ratsimp],
351   -(sqrt(2)*atanh(1/sqrt(2))-2)/2
355 test_sum(
356   sum((4^(-i-1)*(-1)^i*x^(i+1))/(i+1),i,0,inf),
357   [],
358   false,
359   [],
360   log(x/4+1)
364 test_sum(
365   'sum('sum(n!/(k!^2*(n - 2*k)!)*(x/y)^k*(x*y)^(n - k), n, 2*k, inf), k, 0, inf),
366   [x*y<1],
367   false,
368   [lambda([u], scanmap(factor, u, 'bottomup))],
369   1/sqrt((x*y-2*x-1)*(x*y+2*x-1))
370 ), use_zeilberger=false$
373 test_sum(
374   sum(1/k, k, 1, n),
375   [],
376   false,
377   [],
378   harmonic_number(n))$
381 test_sum(
382   sum(k*harmonic_number(k),k,1,n),
383   [],
384   false,
385   [ratsimp],
386   ((n^2+n)*(harmonic_number(n)+1/(n+1)))/2-(n^2+n)/4);
389 test_sum(
390   sum(k^2*harmonic_number(k),k,1,n),
391   [],
392   false,
393   [ratsimp],
394   ((12*n^3+18*n^2+6*n)*harmonic_number(n)-4*n^3+3*n^2+n)/36);
397 test_sum(
398   sum(k^2*harmonic_number(n+k),k,1,n),
399   [],
400   false,
401   [ratsimp],
402   ((24*n^3+36*n^2+12*n)*harmonic_number(2*n)+(-12*n^3-18*n^2-6*n)*harmonic_number(n)-10*n^3-9*n^2+n)/36),
403   harmonic_number_expand=true;
406 declare(N,integer);
407 done;
409 test_sum(
410   sum(sin(n*x), n, 1, N),
411   [],
412   false,
413   [],
414   -((cos(x)-1)*sin(x*N+x)-sin(x)*cos(x*N+x)+sin(x))/(2*cos(x)-2));
417 remove(N,integer);
418 done;
420 test_sum(
421   sum(((-4)^k*binomial(k,m)*binomial(n+k,2*k))*n/(n+k),k,m,n),
422   [m>1, n>0],
423   false,
424   [factcomb, radcan],
425   (2^(2*m)*n*(-1)^n*(n+m-1)!)/((2*m)!*(n-m)!)), sum_min=m;
428 test_sum(
429   sum(harmonic_number(n)/2^n, n, 1, inf),
430   [],
431   false,
432   [],
433   2*log(2));
436 test_sum(
437   sum(harmonic_number(n)/n/(n+1), n, 1, inf),
438   [],
439   false,
440   [],
441   %pi^2/6);
445 test_sum(
446   sum(n*harmonic_number(n)/2^n, n, 1, inf),
447   [],
448   false,
449   [],
450   2*log(2)+2
454 test_sum(
455   sum(harmonic_number(n)/n/2^n, n, 1, inf),
456   [],
457   false,
458   [rectform],
459   %pi^2/12
460 ), sum_by_integral_transforms=[logcontract];
464 test_sum(
465   sum(n^2*harmonic_number(2*n)/2^n, n, 1, inf),
466   [],
467   false,
468   [],
469   -(17*sqrt(2)*log(3-2*sqrt(2))-24*log(2)-68)/8
473 test_sum(
474   sum(((x-1)^(2*n+1)*(x+1)^(-2*n-1))/(2*n+1),n,0,inf),
475   [x<1, x>0],
476   false,
477   [rootscontract, lambda([u], scanmap(factor, u)), ratsimp],
478   log(x)/2
482 test_sum(
483   sum(-1/(2*k)+1/(2*2*k+1)+1/(2*2*k+3), k, 1, inf),
484   [],
485   false,
486   [ratsimp],
487   (9*log(2)-8)/6
491 test_sum(
492   sum(log((2*k+1)/(2*k-1)), k, 1, n),
493   [],
494   false,
495   [ratsimp],
496   log(2*n+1)
500 test_sum(
501   sum(k*(k/2)!,k,1,n),
502   [],
503   false,
504   [],
505   2*(n/2+1)!+2*((n-1)/2+1)!-sqrt(%pi)-2
509 test_sum(
510   sum(i*fib(i-1)/2^i,i,1,inf),
511   [],
512   false,
513   [],
514   6
518 test_sum(
519   sum(1/(sqrt(k*(k + 1)) * (sqrt(k) + sqrt(k + 1))), k, 1, inf),
520   [],
521   false,
522   [],
523   1
527 block([gamma_expand: true],
528 test_sum(
529   sum(%e^-4*(k-4)^2*4^k/k!, k, 0, inf),
530   [],
531   false,
532   [],
533   4
538 block([gamma_expand: true],
539 test_sum(
540   sum(%e^-4*(k-5)^2*4^k/k!, k, 0, inf),
541   [],
542   false,
543   [],
544   5
548 test_sum(
549   sum(k^2*binomial(n,k), k, 0, n),
550   [],
551   false,
552   [],
553   2^(-2+n)*n*(1 + n)
554   );
557 test_sum(
558   sum(k^2*binomial(n,k), k, 0, n),
559   [],
560   false,
561   [],
562   2^(-2+n)*n*(1 + n)
563   );
566 test_sum(
567   sum(k^2*binomial(n,k), k, 1, n),
568   [],
569   false,
570   [],
571   2^(-2+n)*n*(1 + n)
572   );
575 test_sum(
576   sum(k^2*binomial(n,k), k, 2, n),
577   [],
578   false,
579   [],
580   1/4*n*(-4+2^n+2^n*n)
581   );
584 test_sum(
585   sum(k^2*binomial(n,k), k, 3, n),
586   [],
587   false,
588   [],
589   1/4*n*(4+2^n-8*n+2^n*n)
590   );
594 test_sum(
595   sum(binomial(n,k)*binomial(k-1,j)*(-1)**(k-1-j),k,j+1,n),
596   [j>1],
597   false,
598   [],
599   1
600   );
603 /* SF bug #3236: "bug in simplifying infinite sum with 1st (0th) negative term" */
605 test_sum(
606   sum(1/((n+1)*(2*n-1)), n, 1,inf),
607   [],
608   false,
609   [],
610   (2*log(2)+1)/3);
613 test_sum(
614   sum(1/((2*n-1)^2*(2*n+1)^2*(2*n+3)^2),n,0,inf),
615   [],
616   false,
617   [],
618   (3*%pi^2)/256);
621 ratsimp (simplify_sum(sum(1/((n+1)*(2*n-1)), n, 1,inf)) -simplify_sum(sum(1/((n+1)*(2*n-1)), n, 0,inf)));
624 ratsimp (simplify_sum(sum(1/((2*n+1)^2-4)^2, n, 0, inf)));
625 1/64*%pi^2;
627 /* SF bug #3521: "simplify_sum(sum(binomial(1,n),n,0,inf)) gives 3 instead of 2" */
629 simplify_sum(sum(binomial(1,n),n,0,inf));
632 foo: makelist (simplify_sum(sum(binomial(1,n),n,n0,inf)), n0, 0, 10);
633 [2, 1, 'sum(binomial(1,n),n,2,inf), 'sum(binomial(1,n),n,3,inf), 'sum(binomial(1,n),n,4,inf),
634  'sum(binomial(1,n),n,5,inf), 'sum(binomial(1,n),n,6,inf), 'sum(binomial(1,n),n,7,inf),
635  'sum(binomial(1,n),n,8,inf), 'sum(binomial(1,n),n,9,inf), 'sum(binomial(1,n),n,10,inf)];
637 /* binomial(mm, nn) = 0 for nn - mm an integer and nn > mm.
638  * This rule seems to interfere with extended_nusum (causing extended_nusum
639  * to return 0 instead of 1 for 'sum(binomial(0, n), n, 0, inf)), so let's not worry about
640  * making this a general rule.
641  */
642 (matchdeclare (mm, all, nn, lambda ([e], featurep (e - mm, integer) and e > mm)),
643  myrule: first (tellsimpafter (binomial (mm, nn), 0)),
644  ev (foo, nouns)); /* expand(foo, 0, 0) doesn't have any effect. dunno what's going on. */
645 [2, 1, 0, 0, 0,  0, 0, 0, 0, 0,  0];
647 remrule (binomial, myrule);
648 binomial;
650 makelist (simplify_sum(sum(binomial(m, n), n, 0, inf)), m, 0, 10);
651 [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024];
653 (reset(verbose,linsolvewarn),0);
656 /* SF bug #3462: "simplify_sum() variable name clash" */
658 kill(a);
659 done;
661 simplify_sum(sum((2*i+1)^-2, i, 0, inf));
662 %pi^2/8;
664 (a[i] := i, simplify_sum(sum((2*i+1)^-2, i, 0, inf)));
665 %pi^2/8;
667 (kill(a), simplify_sum(sum((2*i+1)^-2, i, 0, inf)));
668 %pi^2/8;