La formalisation du calcul différentiel comprend la formalisation d'un système de variables chacune associée à un système de coordonnées, et comprend la formalisation du corps des hyperréels comme décrit dans l'article Formalisatiopn du calcul différentiel. Et nous présenterons ici seulement leurs aspects pratiques. Nous expliquerons les notations différentielles totales ou partielles, scalaires, vectorielles, matricielles....
Considérons une variable d'état `U` fonction du temps `t`. On note `U(t)` la valeur de `U` à l'intant `t`. Mais davantage que cela, on munie `U` d'un système de coordonnées par défaut constitué de l'unique variable de nom `t`. Cela se fait en déclarant le neurone suivant :
`U"←"t`
Dès lors, la variable `U` devient une fonction de `t`, et on considère qu'elle s'applique par défaut sur `t`. Ainsi l'expression `U`, apparaissant dans une équation où l'on attend une valeur réelle, représentera la valeur `U(t)`. Tout se passe comme si nous étions dans un système physique possédant deux variables d'état `U,t`, et que nous affirmions d'une part, que la variable `U` est liée à la variable `t` c'est à dire déterminée par `t`, et d'autre part que la variable de nom `t` constituent un système de coordonnées implicite pour la variable `U`, faisant que la valeur `U` est définie par défaut en `t`, ce qui s'écrit :
`U = U(t)`
Ainsi, lorsqu'on évoque la valeur de la variable d'état `U` sans préciser à quel instant, cela signifie qu'on évoque sa valeur à l'instant `t`. Mais il existe un deuxième sens pour le symbole `U`, qui se manifeste selon le contexte. Celui-ci peut désigner non pas la valeur `U(t)` mais la variable `U` prise dans son ensemble c'est à dire la fonction `U : t|->U(t)` qui possède un ensemble de départ et un ensemble d'arrivé tous deux fixés également par le contexte. Pour résumer, si `U` se trouve dans une expression à la place d'une valeur alors il désigne `U(t)`, et s'il se trouve à la place d'une fonction alors il désigne la fonction `t|->U(t)`. Autrement dit, il existe deux objects de même nom `U` mais de types différents, la valeur `U"="U(t)`, et la fonction `U"=" (t|->U(t))`. La variable `t` se différencie de la variable `U` en tant qu'elle est libre tandis que `U` est dépendant de `t`. La variable `t` représente ici le temps, mais rien ne nous interdit qu'il en soit autrement dans une autre simulation.
Autre remarque concernant les variables muettes. On appelle variable muette, les variables qui sont déclarées dans un itérateur quelconque tel une intégrale ou une déclaration de fonction et qui sont donc d'une certaine façon anonymes. Par exemples :
`S = int_t U(t) dt` `U = (t|->U(t))`
Si la variable muette porte le nom d'une variable déjà existante comme c'est le cas sur ces exemples avec la variable muette `t`, alors il s'opère un masquage sur le corps de l'itérateur, la variable muette `t` masque la variable de même nom qui est déclarée dans le contexte parent. Ainsi, toute référence à cette variable à l'intérieur du corps de l'itérateur concernera la variable muette déclarée dans l'itérateur et non celle déclarée dans le contexte parent. Et il peut y avoir une succession de contextes parents emboités les uns dans les autres, correspondant à une succession d'itérateurs emboités les uns dans les autres. Par convention on utilise le symbole `"↑"` comme préfixe d'une variable pour désigner la variable de même nom mais du contexte parent juste au dessus. Par exemple :
`S_color(green)k = sum_(k=1)^(color(green)k-1) ("↑"k-k)/k = sum_(j=1)^(k-1) (k-j)/j`
`S_k = (k-1)/1+(k-2)/2+(k-3)/3+...+3/(k-3)+2/(k-2)+1/(k-1) `
Dans cet exemple, l'index `k` est défini parcourant l'intervalle des entiers de `k"="1` à `k "=" color(green)k "-"1`. Et le masquage de la variable `k` ne s'opère que dans le corps de l'itérateur et non pas dans sa déclaration. Ainsi le `color(green)k` apparaissant dans la défintion de la borne supérieure de la variable muette `k`, n'est pas lui-même, mais la variable `color(green)k` servant d'indice de `S` qui est ainsi déclarée dans le contexte parent.
Pour définir formellement les éléments différentiels, on se place dans le corps des hyperréels qui est une extention du corps ordonné des réels contenant l'élément `omega` qui représente l'infini du premier ordre. L'élément `omega^2` représente l'infini du second ordre. L'élément `omega^-1` représente l'infiniment petit du premier ordre, et on le nomme aussi `epsilon`. L'élément `omega^-2"="epsilon^2` représente l'infiniment petit du second ordre. L'élément `omega^-n "=" epsilon^n` représente l'infiniment petit du `n`-ième ordre. Ce corps n'est pas archimédien, c'est à dire que étant donné deux valeurs non nulles `x` et `y`, il se peut que `|x|` ne puisse pas être rendu plus grand que `|y|` en le multipliant par un entier. Dans ce cas `x` est d'un ordre strictement inférieur à `y` ce qui se note `x"≺"y`, et on dit alors que `x` est négligeable devant `y` sachant que cette approximation est en faite exacte devant `y`. Et inversement, il est d'un ordre inférieur ou égal à `y` s'il existe un entier `k` tel que `|x|` soit plus petit que `k|y|` ce qui se note `x"≼" y`, et on dit alors que `x` est de l'ordre de `y` sachant qu'il peut être nul et peut être d'un ordre inférieur.
`x"≺" y <=> AAn "∈" NN, n|x|"<"|y|` `x"≼" y <=> EEk"∈" NN, |x|"<" k|y|`
L'ordre de `x` est l'ensemble des hyperréels dont la norme peut être à la fois minorer et majorer par des éléments de `RR^"+*"|x|`. On vérifie par la logique que l'on a bien :
`¬(x"≺" y) <=> (y"≼" x)` `¬(x"≼" y) <=> (y"≺" x)`
Et on vérifie par la logique que l'on a bien la transitivité :
`(x"≼" y)" et "(y"≺"z) => (x"≺"z)`
Dans ce corps, l'égalité qui est utilisée couramment est relative à un ordre, ou bien est définie à plus ou moins un ordre près. Et on utilise la notation de Landeau appliquée aux hyperréels, le « petit o », noté `o`, pour préciser l'égalité relative à un ordre, et le « grand O », noté `O`, pour préciser l'égalité à un ordre plus ou moins près.
`x` et `y` sont égaux pour `z`. `x = y+o(z)` `x"-"y"≺"z` `AAn "∈" NN, n|x"-"y|"<"|z|` `x` et `y` sont égaux à plus ou moins l'ordre de `z`. `x = y+O(z)` `x"-"y"≼" z` `EEk"∈" NN, |x"-"y|"<"k|z|`
L'égalité `x "=" y"+"o(z)` signifie que `x` et `y` sont égaux pour `z`, c'est à dire que l'on peut transformer `x` en `y` par l'ajout d'une valeur d'ordre strictement inférieur à `z`. Autrement dit `x"-"y` est d'un ordre strictement inférieur à `z`, ce qui se note `(x"-"y)"≺"z`. Et donc, qu'elle que soit un entier `n`, la valeur `n|x"-"y|` est toujours inférieur à `|z|`.
L'égalité `x "=" y"+"O(z)` signifie que `x` et `y` sont égaux à plus ou moins l'ordre de `z`, c'est à dire que l'on peut tranformer `x` en `y` par l'ajout d'un multiple réel de `z` et d'un complément d'ordre inférieur à `z`. Autrement dit, `x"-"y` est du même ordre que `z`, et sous-entendu, ou d'un ordre inférieur à `z`, ce qui se note `(x"-"y)"≼"z`. Et donc, il existe un entier `k` tel que `|x"-"y|` est inférieur à `k|z|`.
`x` est d'un ordre strictement inférieur à `y`. `x"≺" y <=> x"="o(y)` `x` est égale à zéro pour `y`. `x` est de l'ordre de `y`,
et sous-entendu, ou d'un ordre inférieur à `y` `x"≼" y <=> x"="O(y)` `x` est égale à zéro à plus ou moins l'ordre de `y` près.
`x` est différent de zéro pour `y`.`x"≠"o(y) <=> y"="O(x)` `y` est égale à zéro à plus ou moins l'ordre de `x` près. `x` est différent de zéro à plus ou moins l'ordre de `y` près.`x"≠"O(y) <=> y"="o(x)` `y` est égale à zéro pour `x`.
Notez que les ordres ne se résument pas en la série suivante :
`...,epsilon^4,epsilon^3,epsilon^2,epsilon,1,omega,omega^2,omega^3,omega^4,...`
Par exemples l'ordre `sqrt(omega)` se situe entre l'ordre `1` et l'ordre `omega`, et l'ordre `omega^omega` se situe au dela de toutes les puissances entières de `omega`. Grace à la transitivité, si `x` est de l'ordre de `y` et que `y` est négligeable devant `z` alors `x` est négligeable devant `z` :
`(x"="O(y)" et "y"="o(z)) => x"="o(z)`
Et donc par exemple nous avons :
`x"="O(epsilon) => x"="o(epsilon^2)`
Mais la réciproque n'est pas vrai. Il se peut que `x"="o(epsilon^2)` et que `x"≠"O(epsilon)`. En effet, `x` peut être par exemple de l'ordre de `epsilon ^(3/2)` et dans ce cas il est bien égale à zéro pour l'ordre `epsilon^2` mais il est infini pour l'ordre d'`epsilon` et donc non nul.
Etant donné une variable libre `t`, l'élément différentiel `dt` représente une variation infinitésimale du premier ordre de `t`. Cela signifie que `dt` constitue une nouvelle variable libre de la forme `dt=r epsilon` où `r` est du même ordre de grandeur que `t` c'est à dire est un réel. Et on peut répéter l'opération. La variable `d(dt)` que l'on nomme `d^2t` représente une variation infinitésimale d'une valeur déjà infinitésimale qu'est `dt`. La variable `d^2t` constitue une nouvelle variable libre de la forme `d^2t = s epsilon` où `s` est du même ordre de grandeur que `dt` c'est à dire est de la forme `s = r omega^-1` avec `r` réel. Autrement dit `d^2t` est une nouvelle variable libre de la forme `r epsilon^2` où `r` est un réel. C'est pourquoi `d^2t` est une grandeur infinitésimale du second ordre comme l'est `dt^2`, comprenez `dt dt` et non `d(t^2)`, et comme l'est `epsilon^2`.
`t` est de l'ordre de `1`. `t =O(1)`
`dt` est de l'ordre d'`epsilon`. `dt =O(epsilon)`
`d^2t` est de l'ordre d'`epsilon^2`. `d^2t = O(epsilon^2)`
Remarquez que `t` est de l'ordre de `1`, que `dt` est de l'ordre de `epsilon`, et que `d^2t` est de lordre d'`epsilon^2`.
Etant donné une variable d'état `U` liée à la variable `t`. La variable `U` est donc une fonction de `t`. Cela se déclare par le neurone suivant :
`U"←"t`
Dans un premier temps, nous ne considérerons que des fonctions plusieurs fois dérivables. L'élément différentiel `dU` représente alors une variation infinitésimale de `U` correspondant à une variation infinitésimale du premier ordre de sa coordonnée `t`. `U` étant dérivable, la variable `dU` est du même ordre que `dt`, elle constitue donc une nouvelle variable d'ordre `epsilon`. Et elle est liée à `t` qui est de l'ordre de `1`, et à `dt` qui est de l'ordre d'`epsilon`. Et sa définition est donc relative à `epsilon` :
`dU = U(t"+"dt)-U + o(epsilon)`
Ce qui signifie qu'elle est d'un ordre `nu` strictement inférieur à `epsilon` :
`dU = U(t"+"dt)-U + O(nu)` avec `nu"≺"epsilon`
`dU` dépend de `t` et de `dt`. Donc son système de coordonnées par défaut est `(t,dt)`. Ainsi la définition explicite est `dUcolor(green)("("t,dt")")=Ucolor(green)("("t"+"dt")") - Ucolor(green)("("t")") + O(epsilon^2)`. On notera parfois les arguments d'appels en verts afin de les distinguer d'un éventuel produit. La fonction `U` est dérivable donc nous avons :
`U(t"+"dt) = U + O(epsilon)`
Cela signifie que `U` est égale à `U(t"+"dt)` à plus ou moins l'ordre d'`epsilon` près, et donc qu'il est égale à `U(t"+"2dt)` à plus ou moins l'ordre d'`epsilon` près, et donc qu'il est égale à `U(t"+"ndt)` à plus ou moins l'ordre d'`epsilon`, et cela pour tout entier `n`. Le même raisonnment s'applique pour `dU` mais à plus ou moins l'ordre d'`epsilon^2` près.
`AAn "∈" NN, U = U(t"+"ndt) + O(epsilon)`
`AAn "∈" NN, dU = dU(t"+"ndt,dt) + O(epsilon^2)`
La fonction `U` est plusieurs fois dérivable, et l'élément différentiel `d(dU)` est donc d'ordre `epsilon^2`. Ceci pour les mêmes raisons que `dU` est de l'ordre d'`epsilon`. Donc nous avons une définition plus précise à plus ou moins l'ordre d'`epsilon^2` près :
`U(t"+"dt) = U + dU + O(epsilon^2)`
La dérivé de `U`, que l'on note `dotU`, est égale à la division de `dU` par `dt` plus ou moins l'ordre d'`epsilon`, et à la condition que `dt` ne soit pas nul.
`dotU = (dU)/(dt) + O(epsilon)`
La dérivée `dotU` forme une nouvelle variable liée à `t`, possédant comme système de coordonnée par défaut l'unique variable de nom `t`. Elle est d'ordre `1`, et elle est définie à plus ou moins l'ordre d'`epsilon` près. La formule précédente se réécrit en formant le premier terme du développement de Taylor :
`U(t"+"dt) = U + (dU)/(dt)dt + O(epsilon^2)`
L'expression `U(t"+"dt) = U + dU + O(epsilon^2)` signifie que `U"+"dU` est égale à `U(t"+"dt)` à plus ou moins l'ordre d'`epsilon^2` près, et donc que `U(t"+"dt)+dU(t"+"dt,dt)` est égale à `U(t"+"2dt)` à plus ou moins l'ordre d'`epsilon^2` près . Et en sommant les égalités, on obtient :
Et comme `dU = dU(t"+"ndt,dt) + O(epsilon^2)`, nous avons :`U+ dU+dU(t"+"dt,dt) = U(t"+"2t) + O(epsilon^2)`
`U+ dU+dU(t"+"dt,dt)+dU(t"+"2dt,dt) = U(t"+"3dt) + O(epsilon^2)`
`...`
`AAn "∈" NN, U + sum_(k=0)^n dU(t"+"kdt,dt) = U(t"+"ndt"+"dt) + O(epsilon^2)`
`AAn "∈" NN, U+ ndU = U(t"+"ndt) + O(epsilon^2)`
Et donc
`AAn "∈" NN, U(t"+"ndt) = U + n(dU)/(dt)dt + O(epsilon^2)` ---- 4 octobre 2018 ----
Considérons une variable `V` liée à deux variables libres `(x,y)`. Cela se déclare par le neurone suivant :
L'élément différentiel `dV` représente une variation infinitésimale de `U` correspondant à une variation infinitésimale du premier ordre de sa coordonnée `t`. `V` étant dérivable, la variable `dV` est du même ordre que `dx` et `dy `, elle constitue donc une nouvelle variable d'ordre `epsilon`. Et elle est liée à `x` et `y` qui sont de l'ordre de `1`, et à `dx` et à `dy` qui sont de l'ordre d'`epsilon`. Et sa définition est donc relative à `epsilon` :
`dV = V(x"+"dx,y"+"dy)-V + o(epsilon)`
Ce qui signifie qu'elle est d'un ordre `nu` strictement inférieur à `epsilon` :
`dV = V(x"+"dx,y"+"dy)-V + O(nu)` avec `nu"≺"epsilon`
`dV` dépend de `x` et `y` et de `dx` et `dy`. Donc son système de coordonnées par défaut est `(x,y,dx,dy)`. Ainsi la définition explicite est :
`dVcolor(green)("("x,y,dx,dy")")=Vcolor(green)("("x"+"dx,y+dy")") - Ucolor(green)("("x,y")") + O(epsilon^2)`
On notera parfois les arguments d'appels en verts afin de les distinguer d'un éventuel produit. La fonction `V` est dérivable donc nous avons :
`V(x"+"dx,y"+"dy) = V + O(epsilon)`
Cela signifie que `V` est égale à `V(x"+"dx,y"+"dy)` à plus ou moins l'ordre d'`epsilon` près, et donc qu'il est égale à `V(x"+"adx,y"+"bdy)` à plus ou moins l'ordre d'`epsilon` près, et cela pour tout couple d'entier `(a,b) `. Le même raisonnment s'applique pour `dV` mais à plus ou moins l'ordre d'`epsilon^2` près.
`AAn "∈" NN, V = V(x"+"adx,y"+"ady ) + O(epsilon)`
`AAn "∈" NN, dV = dV(x"+"adx,y"+"ady,dx,dy) + O(epsilon^2)`
La fonction `V` est plusieurs fois dérivable, et l'élément différentiel `d(dV)` est donc d'ordre `epsilon^2`. Ceci pour les mêmes raisons que `dV` est de l'ordre d'`epsilon`. Donc nous avons une définition plus précise à plus ou moins l'ordre d'`epsilon^2` près :
`V(x"+"adx,y"+"ady) = V + dV(x"+"adx,y"+"ady ,dx,dy) + O(epsilon^2)`
La dérivé de `V`, que l'on note `dotV`, est égale à la division mat de `dV` par `dt` plus ou moins l'ordre d'`epsilon`, et à la condition que `dt` ne soit pas nul.
`dotU = (dU)/(dt) + O(epsilon)`
La dérivée `dotU` forme une nouvelle variable liée à `t`, possédant comme système de coordonnée par défaut l'unique variable de nom `t`. Elle est d'ordre `1`, et elle est définie à plus ou moins l'ordre d'`epsilon` près. La formule précédente se réécrit en formant le premier terme du développement de Taylor :
`U(t"+"dt) = U + (dU)/(dt)dt + O(epsilon^2)`
L'expression `U(t"+"dt) = U + dU + O(epsilon^2)` signifie que `U"+"dU` est égale à `U(t"+"dt)` à plus ou moins l'ordre d'`epsilon^2` près, et donc que `U(t"+"dt)+dU(t"+"dt,dt)` est égale à `U(t"+"2dt)` à plus ou moins l'ordre d'`epsilon^2` près . Et en sommant les égalités, on obtient :
Et comme `dU = dU(t"+"ndt,dt) + O(epsilon^2)`, nous avons :`U+ dU+dU(t"+"dt,dt) = U(t"+"2t) + O(epsilon^2)`
`U+ dU+dU(t"+"dt,dt)+dU(t"+"2dt,dt) = U(t"+"3dt) + O(epsilon^2)`
`...`
`AAn "∈" NN, U + sum_(k=0)^n dU(t"+"kdt,dt) = U(t"+"ndt"+"dt) + O(epsilon^2)`
`AAn "∈" NN, U+ ndU = U(t"+"ndt) + O(epsilon^2)`
Et donc
`AAn "∈" NN, U(t"+"ndt) = U + n(dU)/(dt)dt + O(epsilon^2)`
La fonction `V` est plusieurs fois dérivable, et l'élément différentiel `d(dV)` est donc d'ordre `epsilon^2`. Ceci pour les mêmes raisons que `dV` est de l'ordre d'`epsilon`. Donc nous avons une définition plus précise à plus ou moins l'ordre d'`epsilon^2` près :
`V(t"+"dt) = V + dV + O(epsilon^2)`
La dérivé de `U`, que l'on note `dotU`, est égale à la division de `dU` par `dt` plus ou moins l'ordre d'`epsilon`, et à la condition que `dt` ne soit pas nul.
`dotU = (dU)/(dt) + O(epsilon)`
La dérivée `dotU` forme une nouvelle variable liée à `t`, possédant comme système de coordonnée par défaut l'unique variable de nom `t`. Elle est d'ordre `1`, et elle est définie à plus ou moins l'ordre d'`epsilon` près. La formule précédente se réécrit en formant le premier terme du développement de Taylor :
`U(t"+"dt) = U + (dU)/(dt)dt + O(epsilon^2)`
`V` étant dérivables, l'élément différentiel `dV` représente une variation infinitésimale du premier ordre de `V` correspondant à une variation infinitésimale du premier ordre de ses coordonnées `(x,y)`, représentée par les variables `(dx,dy)` qui sont donc choisis de l'ordre d'`épsilon`. Sa définition est :
`dV = V(x+dx,y+dy)-V+O(epsilon)`
La raison de cet ordre de définition à `epsilon^2` près, tient dans la définition de `d(d(U))` que nous verrons après.
Et nous avons :
`dx =O(epsilon)` `dy = O(epsilon)`
`dV` constitue une nouvelle variable liée aux 4 variables libres `(x,y,dx,dy)`,. Le système de coordonnées de `dV`, par défaut, sera `(x,y,dx,dy)`. Ainsi la définition explicite est `dV``(x,y,dx,dy)` `"=" V(x+dx,y+dy)-V`. On note parfois les arguments d'appels en verts afin de les distinguer d'un éventuel produit. Comme `V` est continue nous avons :
`V(t+dx,y+dy) = V + O(epsilon)``V(t+dx,y+dy) = V + o(1)`
5 L'élément différentiel du second ordre
La variable `d(dU)` que l'on nomme `d^2U` représente une variation infinitésimale d'une valeur déjà infinitésimale qu'est `dU(t,dt)` où `t` est une variable libre en `O(1)` et `dt` est une variable libre en `O(epsilon)`. Elle constitue donc une nouvelle variable liée à quatres variables libres `(t,dt,d_2t,d^2t)` où la variable `d_2t` est une variation en `O(epsilon)` de `t`, et où la variable `d^2t` est la variation en `O(epsilon^2)` de `dt` pour le calcul de `dU` :
`d^2U = dU(t+d_2,dt + d^2t) - dU`
`d^2U = (U((t+d_2t) + (dt +d^2t)) - U) - (U(t+dt)-U)`
`d^2U = U(t+d_2t + dt +d^2t) - U(t+dt)`
`d^2U = U(t+dt + d_2t +d^2t) - U(t+dt)`
`d^2U = dU(t+dt, d_2t +d^2t)`
Où `(t,dt,d_2t,d^2t)` sont 4 variables libres d'ordres respectifs `(O(1), O(epsilon), O(epsilon) , O(epsilon^2))`.
C'est alors que nous faisons le choix de choisir ces variables selon le rôle quelle sont sensées jouer. La variation `dt` est soit -epsilon, 0 ou +epsilon, la variation d_2t également
`d^2U = dU(t+deltat,dt + d^2t)-dU`
`U(t+dt) = U(t) + O(1)` `U(t+dt) = U + dU + O(dU)` `U(t+dt) = U + dU +(d^2U)/(2!) + O(dU^2)``U(t+dt) = U + dU +(d^2U)/(2!) + (d^3U)/(3!) + O(dU^3)`