### 6.18.4 Derivées et derivées partielles d’une expression et derivées d’une fonction : `diff derive deriver ’`

#### Généralités

`diff` ou `derive` ou `deriver` sont des fonctions préfixées alors que `’` est la version postfixée de `diff` ou `derive` ou `deriver`.
Ces fonctions ont un, deux ou plus de 2 arguments :

- avec un argument qui peut être soit une fonction, soit une expression de la variable `x`.
  - Si cet argument est une fonction, `diff` ou `derive` ou `deriver` ou `’` renvoie la fonction dérivée de cette fonction.
    Ces fonctions sont alors equivalentes à `function_diff`.
  - Si cet argument est une expression de la variable `x`, `diff` ou `derive` ou `deriver` ou `’` renvoie la dérivée de l’expression par rapport à `x`
  - Remarque Dans ce cas on peut aussi utiliser `convert` (ou sa version infixée `=>`) avec l’option `diff`.
- avec 2 arguments qui peuvent être soit une expression et le nom d’une variable, soit une expression et une liste de noms de variables.
  Cela va permettre de calculer des dérivées et des derivées partielles du premier ordre et plusieurs arguments pour calculer des derivées partielles de tous les ordres d’une expression.
- avec plus que 2 arguments qui peuvent être:
  une expression et le nom des variables par rapport auxquelles il faut dériver cette expression (le nom des variables est éventuellement suivi de $n pour indiquer le nombre n de fois que l’on veut dériver) ,

#### Derivée et fonction derivée

`diff` ou `derive` ou `deriver` ou `’` ont comme argument soit une fonction, soit une expression de la variable `x`.

- Si cet argument est une fonction, `diff` ou `derive` ou `deriver` ou `’` renvoie une fonction qui est la fonction dérivée de la fonction argument.
  `diff` (ou `derive` ou `deriver` ou `’`) est alors equivalente à `function_diff`.
  On tape :
  `f(x):=x```^```2+x*cos(x)+`
  Pour définir g comme f′, on tape :
  `g:=f’`
  Ou :
  `g:=(f=>diff)`
  Ou :
  `g:=diff(f)`
  Ou :
  `g:=function_diff(f)`
  Ou :
  `g:=unapply(diff(f(x),x),x)`
  Ou :
  `g(x):=f’(x)`
  Ou :
  `g(x):=(f(x)=>diff)`
  Ou :
  `g(x):=diff(f)(x))`
  Puis, on tape :
  `g(x)`
  On obtient :
  `cos(x)+x*(-(sin(x)))+2*x`
  Pour définir h comme f″, on tape :
  `h:=f’’`
  Ou :
  `h:=diff(diff(f))`
  Ou :
  `h:=function_diff(function_diff(f))`
  Ou :
  `h:=diff(unapply(diff(f(x),x),x))`
  Ou :
  `h(x):=diff(diff(f))(x))`
  Ou :
  `h(x):=f’’(x)`
  Puis, on tape :
  `h(x)`
  On obtient :
  `-sin(x)+x*(-cos(x))-sin(x)+2`
- Si cet argument est une expression de la variable `x`, `diff` ou `derive` ou `deriver` ou `’` renvoie une expression qui est l’expression de la dérivée de l’argument par rapport à `x`. On tape :
  `f(x):=x```^```+x*cos(x)+`
  Pour calculer la dérivée de f(x), on tape :
  `A:=f(x)’`
  Ou :
  `A:=diff(f(x))`
  On obtient :
  `cos(x)+x*(-(sin(x)))+2*x`
  Ou encore :
  `A:=diff(f(a),a)`
  On obtient :
  `cos(a)+a*(-(sin(a)))+2*a`
  MAIS ATTENTION
  cela ne définit pas une fonction car le résultat est une expression.
  `g(x):=diff(f(x))` ou `g(x):=diff(f(x),x)` n’est pas correct, car lors d’une affectation ce qui est à droite de `:=` n’est pas évalué lors de la définition....il faut utiliser `unapply` (`g(x):=unapply(diff(f(x),x),x)`) ou écrire `g(x):=diff(f)(x)`.

#### Derivées et derivées partielles d’ordre 1 : `diff derive deriver ’`

Pour avoir des derivées partielles d’ordre 1 :
`diff` (ou `derive` ou `deriver` ou `’`) a deux arguments : une expression et une variable (resp une liste contenant le nom des variables) (voir fonctions de plusieurs variables paragraphe 6.52).
`diff` renvoie la dérivée de l’expression par rapport à la variable donnée comme deuxième paramètre, trés utile pour calculer des dérivées partielles!) (resp renvoie une liste contenant les dérivées par rapport aux variables de la liste du 2nd argument).
Exemples :

- Soit à calculer :

  ∂ (x.y2.z3+x.y.z)
  ∂ z

  On tape :
  `(x*y` ``^```2*z```^```3+x*y*z,z)’`
  ou on tape :
  `diff(x*y` ``^```2*z```^```3+x*y*z,z)`

  On obtient :

  `x*y```^```2*3*z```^```2+x*y`
- Soit à calculer les 3 derivées partielles premières de x*y2*z3+x*y*z.
  On tape :
  `(x*y```^```2*z```^```3+x*y,[x,y,z])’`
  Ou on tape :
  `diff(x*y```^```2*z```^```3+x*y,[x,y,z])`
  On obtient :
  `[y```^```2*z```^```3+y*z, x*2*y*z```^```3+x*z, x*y```^```2*3*z```^```2+x*y]`
- Soit à calculer :

  ∂3 (x.y2.z3+x.y.z)
  ∂ y∂2 z

  On tape :
  `(x*y` ``^```2*z```^```3+x*y*z,y,z$2)’`
  Ou on tape :
  `diff(x*y` ``^```2*z```^```3+x*y*z,y,z$2)`
  On obtient :
  `12*x*y*z`

#### Derivée et derivée partielle d’ordre n : `diff derive deriver`

Lorsque `derive` (ou `diff`) a plus de deux arguments, ce sont : une expression et le nom des variables par rapport auxquelles il faut dériver cette expression (le nom des variables est éventuellement suivi de $n pour indiquer le nombre n de fois que l’on veut dériver).
`diff` renvoie la dérivée de l’expression par rapport aux variables données après le premier paramètre (utile pour calculer des dérivées partielles de tous les ordres).
Donc pour dériver n fois :
`diff` (ou `derive`) a n+1 arguments : une expression et le nom de la variable qui sera répété n fois. Pour avoir une écriture plus facile on écrira plutôt le nom de la variable suivi de $n pour indiquer que l’on veut dériver n fois (en effet `x$3=(x,x,x)`). Par exemple pour dériver `exp(x*y)` 1 fois par rapport à x et 2 fois par rapport à y, on met comme arguments l’expression, puis, les noms des variables éventuellement suivi de $ pour indiquer le nombre de fois que l’on veut dériver et on tape `diff(exp(x*y),x,y$2)` qui est équivalent à `diff(exp(x*y),x,y,y)` (en effet `y$2=(y,y)`).
Exemples

- Soit à calculer :

  ∂2 (x.y2.z3+x.y.z)
  ∂ x∂ z

  On tape :
  `(x*y` ``^```2*z```^```3+x*y*z,x,z)’`
  Ou on tape :
  `diff(x*y` ``^```2*z```^```3+x*y*z,x,z)`
  On obtient :
  `y```^```2*3*z```^```2+y`
- Soit à calculer :

  ∂3 (x.y2.z3+x.y.z)
  ∂ x∂2 z

  On tape :
  `(x*y` ``^```2*z```^```3+x*y*z,x,z,z)’`
  Ou on tape :
  `(x*y` ``^```2*z```^```3+x*y*z,x,z$2)’`
  Ou on tape :
  `diff(x*y` ``^```2*z```^```3+x*y*z,x,z,z)`
  Ou on tape :
  `diff(x*y` ``^```2*z```^```3+x*y*z,x,z$2)`
  On obtient :
  `6*y```^```2*z`
- Soit à calculer la dérivée troisième de :

  1
  x2+2

  On tape :
  `(1/(x```^```2+2),x,x,x)’`
  Ou on tape :
  `(1/(x```^```2+2),x$3)’`
  Ou on tape :
  `diff((1)/(x```^```2+2),x,x,x)`
  Ou on tape :
  `diff((1)/(x```^```2+2),x$3)`
  On obtient :
  `(-24*x```^```3+48*x)/(x```^```8+8*x```^```6+24*x```^```4+32*x```^```2+16)`

Remarque
Bien voir la différence entre `diff(Xpr,x,y)` et `diff(Xpr,[x,y])` où `Xpr` est une expression :
`diff`(Xpr,x,y) renvoie ∂2(Xpr)/∂ x∂ y et
`diff`(Xpr,[x,y]) renvoie [∂(Xpr)/∂ x,∂ (Xpr)/∂ y]