Des calculs de différentes sommes

Retour à la page personnelle de Bernard Parisse.

# Chapitre 25 Des calculs de différentes sommes

## 25.1 La fonction sum de Xcas

Cette fonction permet de calculer :

- la somme d’une liste ou d’une séquence
  sum(n$(n=1..5))=sum(n$(n=5..1))=15,
- une somme ayant une primitive discréte. Par exemple
  sum(n,n=1..5)=15 mais sum(n,n=5..1)=-9=-sum(n,n=2..4) et
  sum(n,n)=(n`^`2-n)/2=F(n) qui est la primitive discréte de n (sum(n,n=1..5)=F(5+1)-F(1)),
- d’autres sommes en particulier de sommes avec un pas (quand il y a un pas le pas est le 5ième argument et il n’y a pas de différence entre sum(xpr,n,a,b,2)=sum(xpr,n,b,a,2). Par exemple
  sum(n,n,1,5,2)=sum(n,n,5,1,2)=sum(n,n,1,5,-2)=sum(n,n,5,1,-2)=9

Voici quelques exercices...

## 25.2 Calcul de ∑k=1nkp pour p=1,2,3

### 25.2.1 Calcul de s1(n)=∑k=1nk)

On a :
2*s1=∑k=1nk)+∑k=1nn+1−k)=∑k=1nn+1)=n(n+1)
Donc :

s0(n)= |
n(n+1)
2

On peut aussi remarquer que :
p(p+1)/2−(p−1)p/2=p
On dit que le polynôme x(x−1)/2 est la primitive discrète du polynôme x On a donc :
2s1=∑p=1n2p=∑p=1n(p(p+1)−(p−1)p)=n(n+1)
Avec Xcas, on tape :
sum(k,k=1..n)
On obtient :
(n*(n+1))/2 Remarque
On peut en déduire le calcul de s=∑k=1n(2k−1)).
On a en effet :
s=2∑k=1nk−n=n*(n+1)−n=n2
On aurait aussi pu remarquer que :
2p−1=(p+1)(p−1)−p(p−2)
Donc que la primitive discète du polynôme 2x−1 est le polynôme x(x−2).
On a donc :
s=∑p=1n2p−1=∑p=1n(p2−(p−1)2)=n2
Avec Xcas, on tape :
normal(sum(2k-1,k=1..n))
On obtient :
n`^`2

### 25.2.2 Calcul de s2(n)=∑k=1nk2

On a :
13=1
23=13+3*12+3*1+1
....
k3=(k−1)3+3*(k−1)2+3*(k−1)+1
(k+1)2=k3+3*k2+3*k+1
....
n3=(n−1)3+3*(n−1)2+3*(n−1)+1
(n+1)3=n3+3*n2+3*n+1
En sommant tous les termes :
(n+1)3=3*∑k=1nk2+3∑k=1nk+n=3s2+3n(n+1)/2+n+1
Donc :
3s2(n)=(n+1)((n+1)2−3n/2−n−1)=(n+1)(2n2+n)/2

s2(n)= |
n(n+1)(2*n+1)
6

On peut aussi remarquer que :
p(p+1)*(2p+1)/6−(p−1)*p*(2p−1)/6=p2
Donc que la primitive discète du polynôme x2 est le polynôme x(x−1)(2x−1)/6.
On a donc :
6s2=∑p=1n6p2=∑p=1n(p(p+1)(2p+1)−(p−1)p(2p−1))=n(n+1)(2*n+1)
Avec Xcas, on tape :
factor(sum(k`^`2,k=1..n))
On obtient :
n*(n+1)*(2*n+1)/6

### 25.2.3 Calcul de s3(n)=∑k=1nk3

On a :
14=1
24=14+4*13+6*12+4+1
....
k4=(k−1)4+4*(k−1)3+6*(k−1)2+4*(k−1)+1
(k+1)4=k4+4*k3+6*k2+4*k+1
....
(n+1)4=n4+4*n3+6n2+4*n+1
Donc :
(n+1)4=n4+4s3(n)+6s2(n)+4s1(n)+n Donc : 4s3(n)= (n+1)4−n*(n+1)*(2*n+1)−2n(n+1)−n−1=(n+1)((n+1)3−n(2*n+1)−2n−1)
4s3(n)=(n+1)2((n+1)2−(2*n+1))=(n+1)2n2

s3(n)= |
n2(n+1)2
4

On peut aussi remarquer que :
p2*(p+1)2/4−(p−1)2*p2/4=p3
Donc la primitive discète du polynôme x3 est le polynôme (x−1)2x2/4.
On a donc :
4s3=∑p=1n4p3=∑p=1n(p2(p+1)2−(p−1)2p2)=n2(n+1)2
Avec Xcas, on tape :
factor(sum(k`^`3,k=1..n))
On obtient :
(n`^`2*(n+1)`^`2)/4

## 25.3 Primitive discrète d’un polynôme

### 25.3.1 Comment trouver la primitive discrète d’un polynôme

Soit P un polynôme de degré d.
On veut calculer pour tout entier n ∈ ℕ les sommes : ∑k=0nP(k)
On cherche donc une primitive discrète de P c’est à dire une fonction f telle qu’on ait pour tout x ∈ ℝ f(x+1)−f(x)=P(x).
Cela entraine que pour tout entier n ∈ ℕ on a :
f(n+1)−f(0)=∑k=pnP(k).
Donc pour tout entier n ∈ ℕ on doit avoir f(n+1)−f(n)=P(n) On cherche si P a comme primitive discrète un polynôme Q. Si c’est le cas le polynôme Q doit vérifier : Q(x+1)−Q(x)=P(x) avec P un polynôme de degré d donc Q est défini à une constante près et est de degré d+1. Donc Q est entièrement défini par d+2 valeurs qui sont par exemple :
Q(0)=0=q0 Q(1)=P(0)=q1
Q(2)=P(0)+P(1)=q2
Q(3)=P(0)+P(1)+P(2)=q3
.....
Q(d+1)=P(0)+P(1)+...+P(d)=qd+1
On calcule q0,q1...,qd+1 et on définit Q comme étant le polynôme d’interpolation de Lagrange des points (k,pk) pour k=0..d+1.
Soit R le polynôme définit par R(x)=Q(x+1)−Q(x).
Puisque Q est de degré d+1, on en déduit que R est de degré d.
Comme Q(k+1)−Q(k)=P(k) pour k=0..d, on a :
R(k)=P(k) pour k=0..d.
R et P ont même degré d et ils sont égaux en d+1 valeurs donc :
pour tout x ∈ ℝ on a P(x)=R(x)=Q(x+1)−Q(x).
Donc Q est bien une primitive discrète de P.

### 25.3.2 Reprenons les exemples précédents

Cherchons la primitive discrète de P(x)=x
La primitive discrète de P(x)=x est égale au polynôme de d’interpolation de Lagrange des points :
(0,0), (1,0), (2,1).
On tape :
factor(lagrange([0,1,2],[0,0,1]))
On obtient :
(x*(x-1))/2x
Cherchons la primitive discrète de P(x)=2*x−1
La primitive discrète de P(x)=x2 est égale au polynôme de d’interpolation de Lagrange des points :
(0,0), (1,−1), (2,0).
On tape :
factor(lagrange([0,1,2],[0,-1,0]))
On obtient :
x*(x-2)
Cherchons la primitive discrète de P(x)=x2.
La primitive discrète de P(x)=x2 est égale au polynôme de d’interpolation de Lagrange des points :
(0,0), (1,0), (2,1), (3,5).
On tape :
factor(lagrange([0,1,2,3],[0,0,1,5]))
On obtient :
(x*(x-1)*(2*x-1))/6
Cherchons la primitive discrète de P(x)=x3.
La primitive discrète de P(x)=x3 est égale au polynôme de d’interpolation de Lagrange des points :
(0,0), (1,0), (2,1), (3,9), (4,36).
On tape :
factor(lagrange([0,1,2,3,4],[0,0,1,9,36]))
On obtient :
(x`^`2*(x-1)`^`2)/4 Cherchons la primitive discrète de P(x)=x4.
La primitive discrète de P(x)=x4 est égale au polynôme de d’interpolation de Lagrange des points :
(0,0), (1,0), (2,1), (3,17), (4,98), (5,354).
On tape :
factor(lagrange([0,1,2,3,4,5],[0,0,1,17,98,354]))
On obtient :
(x*(x-1)*(2*x-1)*(3*x`^`2-3*x-1))/30
On en déduit le calcul de s4(n)=∑k=1nk4 :
On tape :
factor(subst((x*(x-1)*(2*x-1)*(3*x`^`2-3*x-1))/30,x=n+1))
On obtient :
(n*(n+1)*(2*n+1)*(3*n`^`2+3*n-1))/30
s4(n)=n*(n+1)*(2*n+1)*(3*n2+3*n−1)/30 Ou on tape :
factor(sum(k`^`4,k=1..n))
On obtient :
(n*(n+1)*(2*n+1)*(3*n`^`2+3*n-1))/30

### 25.3.3 Exercice

Calculer ∑k=410k2+2*k−1 et ∑k=4+√210+√2k2+2*k−1
Cherchons la primitive discrète de P(x)=x2+2x−1.
La primitive discrète de P(x)=x2+2x−1 est égale au polynôme de d’interpolation de Lagrange des points :
(0,0), (1,−1), (2,1), (3,8).
On tape :
factor(lagrange([0,1,2,3],[0,-1,1,8]))
On obtient :
(x*(2*x`^`2+3*x-11))/6
On tape :
f(x):=(x*(2*x`^`2+3*x-11))/6
Ou on tape directement pour définir f :
f:=unapply(factor(lagrange([0,1,2,3],[0,-1,1,8])),x)
On tape :
f(11)-f(4)
On obtient :
462
On vérifie :
On tape :
sum(k`^`2+2*k-1,k=4..10)
On obtient :
462
On tape :
normal(f(11+sqrt(2))-f(4+sqrt(2)))
On obtient :
112*sqrt(2)+476
On vérifie :
On tape :
normal(sum(k`^`2+2*k-1,k=4+sqrt(2)..10+sqrt(2)))
On obtient :
112*sqrt(2)+476

## 25.4 Calcul de ∑k=0nkpcomb(n,k) pour p=0,1,2,3

### 25.4.1 Calcul de s0(n)=∑k=0ncomb(n,k)

On sait que :
(a+b)n=∑k=0ncomb(n,k)akbn−k
donc
s0(n)=∑k=0ncomb(n,k)=(1+1)n=2n
Donc :

s0(n)=2n

Avec Xcas, on tape :
sum(comb(n,k),k=0..n)
On obtient :
2`^`n

### 25.4.2 Calcul de s1(n)=∑k=0nk*comb(n,k)

On sait que :
comb(n,k)=n!/k!(n−k)!
Donc :
k*comb(n,k)=n*comb(n−1,k−1)
On a :
s1(n)=∑k=0nk*comb(n,k)=∑k=1nk*comb(n,k)=
n*∑k=1ncomb(n−1,k−1)=n*∑k=0n−1comb(n−1,k)=n*2n−1
Donc :

s1(n)=n*2n−1

Avec Xcas, on tape :
sum(k*comb(n,k),k=0..n)
On obtient :
n*2`^`(n-1)

### 25.4.3 Calcul de s2(n)=∑k=0nk2*comb(n,k)

On sait que :
comb(n,k)=n!/k!(n−k)! et
∑k=0nk*comb(n,k)=n*2n−1
Donc :
k2*comb(n,k)=n*k*comb(n−1,k−1) On a :
s2(n)=∑k=0nk2*comb(n,k)=∑k=1nk2*comb(n,k)=
n*∑k=1nk*comb(n−1,k−1)=n*∑k=0n−1(k+1)*comb(n−1,k)=
n*∑k=0n−1k*comb(n−1,k)+n*∑k=0n−1comb(n−1,k)=
n*(n−1)*2n−2+n*2n−1=n(n+1)2n−2=n(s(n−1)+s0(n−1))
Donc :

s2(n)=n(n+1)2n−2

Avec Xcas, on tape :
s2:=sum(k`^`2*comb(n,k),k=0..n)
factor(subst(s2,2`^`(n-1),2*2`^`(n-2))) On obtient :
n*(n+1)*2`^`(n-2)

### 25.4.4 Calcul de ∑k=0nk3*comb(n,k)

On sait que :
comb(n,k)=n!/k!(n−k)! et
∑k=0nk2*comb(n,k)=n(n+1)2n−2
Donc :
s3(n)=k3*comb(n,k)=n*k2*comb(n−1,k−1) On a :
∑k=0nk3*comb(n,k)=∑k=1nk3*comb(n,k)=
n*∑k=1nk2*comb(n−1,k−1)=n*∑k=0n−1(k+1)2*comb(n−1,k)=
n(s2(n−1)+2*s1(n−1)+s0(n−1))=
n(n(n−1)*2n−3+2(n−1)2n−2+2n−1)=n(n(n−1)+4(n−1)+4)2n−3=n2(n+3)2n−3
Donc :

s3(n)=n2(n+3)2n−3

Avec Xcas, on tape :
s3:=sum(k`^`3*comb(n,k),k=0..n)
factor(subst(subst(s3,2`^`(n-2),2`^`(n-3)*2),2`^`(n-1),2`^`(n-3)*4))
On obtient :
n`^`2*(n+3)*2`^`(n-3)

## 25.5 Calcul de ∑k=1n1/f(k)

### 25.5.1 Calcul de ∑k=1n1/k(k+1)

On remarque que :
1/k(k+1)=1/k−1/k+1
Donc que :
s=∑k=1n1/k(k+1)=∑k=1n1/k−1/k+1=1−1/n+1=n/n+1
Avec Xcas, on tape :
normal(sum(1/(k*(k+1)),k=1..n))
On obtient :
n/(n+1)

### 25.5.2 Calcul de s=∑k=1n1/(2k−1)(2k+1)

On remarque que :
2/(2k−1)(2k+1)=1/2k−1−1/2k+1
Donc que :
2s=∑k=1n1/(2k−1)(2k+1)=∑k=1n1/2k−1−1/2k+1=1−1/2n+1=2n/2n+1
Donc :

s= |
n
2n+1

Avec Xcas, on tape :
normal(sum(1/((2k-1)*(2k+1)),k=1..n))
On obtient :
n/(2n+1)

### 25.5.3 Calcul de ∑k=1n1/k(k+2)

On remarque que :
2/(k)(k+2)=1/k−1/k+2
Donc que :
2s=∑k=1n1/k(k+2)=∑k=1n1/k−1/k+2=∑p=1n1/p−∑p=3n+21/p=1+1/2−1/n+1−1/n+2=3*n2+5*n/2*n2+6*n+4
Donc :

s= |
3*n2+5*n
4*n2+12*n+8

Avec Xcas, on tape :
normal(sum(1/(k*(k+2)),k=1..n))
On obtient :
(3*n`^`2+5*n)/(4*n`^`2+12*n+8)

### 25.5.4 Calcul de ∑k=1n1/k(k+1)(k+2)

On tape : partfrac(1/(k*(k+1)*(k+2)),k)
On obtient :
1/(k*2)-1/(k+1)+1/((k+2)*2)
Donc :
2*s=∑k=1n1/k−1/(k+1)−(1/(k+1)−1/(k+2))=
∑p=1n1/p−1/(p+1)−∑k=2n+11/p−1/(p+1)=
2s=1−1/2−1/n+1+1/(n+2)=(n2+3*n)/(2*n2+6*n+4) Donc :

s= |
n2+3*n
4*n2+12*n+8

Avec Xcas, on tape :
normal(sum(1/(k*(k+2)),k=1..n))
On obtient :
(n`^`2+3*n)/(4*n`^`2+12*n+8))

## 25.6 Des calculs de sommes avec un programme

On veut savoir si la convergence d’une série est lente ou rapide, par exemple savoir combien il faut de termes pour que ∑k=1n1/k>10.
On peut taper :
sum(1./n,n=1..20000)
On obtient :
0.1048072821722932757281444e2
ou faire un calcul exact plus long :
s:=sum(1/n,n=1..20000)
On obtient :
Integer_too_large_for_display/Integer_too_large_for_display On tape alors :
evalf(s)
On obtient :
0.1048072821722932757281444e2 On veut voir l’incidence qu’il y a sur la précision et sur le temmps d’exécution selon que l’on commence à faire la somme par le plus petit indice ou par le plus grand indice ou faire la somme avec une procédure récursive.
On suppose a≤ b sinon on échange a et b.

    //som1 fait la somme de a jusque b
    som1(u,a,b):={
    local k,c,s;
    si b<a alors c:=b;b:=a;a:=c;fsi;
    s:=0;
    pour k de a jusque b faire
    s:=s+u(k);
    fpour;
    return s;
    }
    :;
    //som2 fait la somme de b jusque a
    som2(u,a,b):={
    local k,c,s;
    si b<a alors c:=b;b:=a;a:=c;fsi;
    s:=0;
    pour k de b jusque a pas -1 faire
    s:=s+u(k);
    fpour;
    return s;
    }
    :;
    //som3 fait la somme recusivement en partageant en 2
    som3(u,a,b):={
    local k,c,s;
    si a>b alors return som3(u,b,a); fsi;
    si a==b alors return u(a); fsi;
    si b==a+1 alors return u(a)+u(b); fsi;
    c:=floor((a+b)/2);
    return som3(u,a,c)+som3(u,c+1,b);
    }:;

On pose :
u(n):=1/n
et
v(n):=1./n

Pour faire des calculs exacts, on tape :
evalf(som1(u,1,100000)) (Evaluation time: 22.6)
evalf(som2(u,1,100000)) (Evaluation time: 33.24)
evalf(som3(u,1,100000)) (Evaluation time: 29.92)
On obtient avec 24 digits :
0.1209014612986342794736320e2
Le résultat est bien sûr le même car les calculs sont faits de façon exacte et seule la réponse est donnée de façon approchée. som1 est plus rapide car on ajoute au début des fractions qui ont un petit dénominateur, som2 est plus lente car on ajoute au toujours des fractions qui ont un grand dénominateur et som3 est intermédiaire mais plutot plus lente car on fait appel à som3(u,c+1,b) où on ajoute des fractions qui ont un grand dénominateur à som3(u,a,c) qui elle aussi comporte des termes ayant un grand dénominateur.

Pour faire des calculs approchés, on tape :
som1(v,1,100000)
On obtient avec 24 digits (Evaluation time: 7.14) :
0.1209014612986342794736311e2
som2(v,1,100000)
On obtient avec 24 digits (Evaluation time: 7.16) :
0.1209014612986342794736294e2
som3(v,1,100000)
On obtient avec 24 digits (Evaluation time: 30.74) :
0.1209014612986342794736320e2
La procédure récursive est nettement plus longue à exécuter mais par contre elle donne un meilleur résultat.

Retour à la page personnelle de Bernard Parisse.