### 6.19.5 Intégration par parties : `ibpdv integrer_par_parties_u` et `ibpu integrer_par_parties_dv`

#### `ibpdv`

`ibpdv` permet de chercher une primitive (ou de calculer une intégrale définie) d’une expression de la forme u(x).v′(x).
`ibpdv` a deux paramètres pour les primitives et cinq paramètres pour les intégrales définies :

- soit une expression de la forme u(x).v′(x) et v(x) (ou une liste de deux expressions [F(x), u(x)*v′(x)] et v(x)),
- soit une expression de la forme g(x) et 0 (ou une liste de deux expressions [F(x), g(x)] et 0).
- pour les intégrales définies, il faut rajouter trois autres paramètres : le nom de la variable et les bornes.

Lorsque `ibpdv` a 2 arguments `ibpdv` renvoie :

- si v(x) ≠ 0, une liste formée de u(x).v(x) et de −v(x).u′(x) (ou une liste formée de F(x)+u(x).v(x) et de −v(x).u′(x)),
- si le deuxième argument est nul, une primitive de g(x) (le premier argument) (ou F(x)+une primitive de g(x)) :
  donc, `ibpdv(g(x),0)` renvoie une primitive `G(x)` de `g(x)` ou
  `ibpdv([F(x),g(x)],0)` renvoie `F(x)+G(x)` où `diff(G(x))=g(x)`.

C’est à dire `ibpdv` renvoie les termes que l’on doit calculer quand on fait une intégration par parties, en faisant éventuellement plusieurs `ibpdv` à la suite.
Ainsi, lorsque l’on vient d’utiliser la commande `ibpdv(u(x)*v’(x),v(x))`, il reste alors à calculer l’intégrale du deuxième terme puis à faire la somme avec le premier terme pour obtenir une primitive de u(x).v′(x): pour cela on peut utiliser à nouveau la commande `ibpdv` avec comme premier paramètre la liste obtenue et comme deuxième paramètre un nouveau v(x) (ou 0 pour terminer l’intégration).
On tape :

`ibpdv(ln(x),x)`

On obtient :

`[x.ln(x),-1]`

puis

`ibpdv([x.ln(x),-1],0)`

On obtient :

`-x+x.ln(x)`

Lorsque `ibpdv` a 5 arguments `ibpdv(u(x)*v’(x),v(x),x,a,b)` ou `ibpdv([F(x),u(x)*v’(x),v(x),x,a,b)` renvoie :

- si v(x) ≠ 0, une liste formée de u(b).v(b)−u(a).v(a) et de −v(x).u′(x) (ou une liste formée de F(b)+u(b).v(b)−F(a)−u(a).v(a) et de −v(x).u′(x)),
- si le deuxième argument est nul, `ibpdv(g(x),0,x,a,b)` renvoie G(b)−G(a) où G(x) est une primitive du premier argument g(x) et
  `ibpdv([F(x),g(x)],0,x,a,b)` renvoie F(x)+G(b)−G(a) où G(x) est une primitive de g(x)) de façon à pouvoir faire plusieurs `ibpdv` à la suite.

On tape :

`ibpdv(ln(x),x,x,2,3)`

On obtient :

`[3*ln(3)-2*ln(2),-1]`

puis

`ibpdv([3*ln(3)-2*ln(2),-1],0,x,2,3)`

On obtient :

`-1+3*ln(3)-2*ln(2)`

Remarque
Lorsque le premier paramètre de `ibpdv` est une liste de deux éléments, `ibpdv` n’agit que sur le dernier élément de cette liste et ajoute le terme intégré au premier élément de la liste (de façon à pouvoir faire plusieurs `ibpdv` à la suite).
On a par exemple :
`ibpdv((log(x))```^```2,x) = [x*(log(x))```^```2,-(2*log(x))]`
il reste à intégrer `-(2*log(x))`, on utilise `ibpdv(ans(),x)` ou on tape :
`ibpdv([x*(log(x))```^```2,-(2*log(x))],x)`
On obtient :
`[x*(log(x))```^```2+x*(-(2*log(x))),2]`
et il reste à intégrer `2`, on utilise `ibpdv(ans(),0)` :
`ibpdv([x*(log(x))```^```2+x*(-(2*log(x))),2],0)`.
On obtient : `x*(log(x))```^```2+x*(-(2*log(x)))+2*x`

#### `ibpu`

`ibpu` permet de chercher une primitive (ou de calculer une intégrale définie) d’une expression de la forme u(x).v′(x).
`ibpu` a deux paramètres pour les primitives et cinq paramètres pour les intégrales définies :

- soit une expression de la forme u(x).v′(x) et u(x) (ou une liste de deux expressions [F(x), u(x)*v′(x)] et u(x)),
- soit une expression de la forme g(x) et 0 (ou une liste de deux expressions [F(x), g(x)] et 0).
- pour les intégrales définies, il faut rajouter trois autres paramètres : le nom de la variable et les bornes.

Lorsque `ibpu` a 2 arguments `ibpu` renvoie : `ibpu` renvoie :

- si u(x) ≠ 0, une liste formée de u(x).v(x) et de −v(x).u′(x) (ou une liste formée de F(x)+u(x).v(x) et de −v(x).u′(x)),
- si le deuxième argument est nul, une primitive de g(x) (le premier argument) (ou F(x)+une primitive de g(x)):
  `ibpu(g(x),0)` renvoie `G(x)` où `diff(G(x))=g(x)` ou
  `ibpu([F(x),g(x)],0)` renvoie `F(x)+G(x)` où `diff(G(x))=g(x)`.

c’est à dire `ibpu` renvoie les termes que l’on doit calculer quand on fait une intégration par parties, en faisant éventuellement plusieurs `ibpu` à la suite.
Ainsi, lorsque l’on vient d’utiliser la commande `ibpu(u(x)*v’(x),u(x))`, il reste à calculer l’intégrale du deuxième terme puis à faire la somme avec le premier terme pour obtenir une primitive de u(x).v′(x). Pour cela, on peut utiliser à nouveau la commande `ibpu` avec comme premier paramètre la liste obtenue et comme deuxième paramètre un nouveau u(x) (ou 0 pour terminer l’intégration).
On tape :

`ibpu(ln(x),ln(x))`

On obtient :

`[x.ln(x),-1]`

puis

`ibpu([x.ln(x),-1],0)`

On obtient :

`-x+x.ln(x)`

Lorsque `ibpu` a 5 arguments `ibpu(u(x)*v’(x),u(x),x,a,b)` ou `ibpu([F(x),u(x)*v’(x)],u(x),x,a,b)` renvoie :

- si u(x) ≠ 0, une liste formée de u(b).v(b)−u(a).v(a) et de −v(x).u′(x) (ou une liste formée de F(b)+u(b).v(b)−F(a)−u(a).v(a) et de −v(x).u′(x)),
- si le deuxième argument est nul, `ibpu(g(x),0,x,a,b)` renvoie G(b)−G(a) où G(x) une primitive de g(x) (le premier argument) (ou `ibpu([F(x),g(x)],0,x,a,b)`) renvoie F(x)+G(b)−G(a) où G(x) est une primitive de g(x)) de façon à pouvoir faire plusieurs `ibpu` à la suite.

On tape :

`ibpu(ln(x),ln(x),x,2,3)`

On obtient :

`[3*ln(3)-2*ln(2),-1]`

puis

`ibpu([3*ln(3)-2*ln(2),-1],0,x,2,3)`

On obtient :

`-1+3*ln(3)-2*ln(2)`

Remarque
Lorsque le premier paramètre de `ibpu` est une liste de deux éléments, `ibpu` n’agit que sur le dernier élément de cette liste et ajoute le terme intégré au premier élément de la liste (de façon à pouvoir faire plusieurs `ibpu` à la suite).
On a par exemple :
`ibpu((log(x))```^```2,log(x)) = [x*(log(x))```^```2,-(2*log(x))]`
il reste à intégrer `-(2*log(x))`, on utilise `ibpu(ans(),log(x))` ou on tape:
`ibpu([x*(log(x))```^```2,-(2*log(x))],log(x))`
On obtient :
`[x*(log(x))```^```2+x*(-(2*log(x))),2]`
et il reste à intégrer `2`, on utilise `ibpu(ans(),0)` :
`ibpu([x*(log(x))```^```2+x*(-(2*log(x))),2],0)`.
On obtient : `x*(log(x))```^```2+x*(-(2*log(x)))+2*x`