Retour à la page personnelle de Bernard Parisse.

# Chapitre 22 Des calculs de différentes sommes

## 22.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...

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

### 22.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`

### 22.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`

### 22.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`

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

### 22.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.

### 22.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`

### 22.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`

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

### 22.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`

### 22.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)`

### 22.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)`

### 22.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)`

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

### 22.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)`

### 22.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)`

### 22.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)`

### 22.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)`)

## 22.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.