Calcul des dérivées symboliques dans MATLAB avec la commande diff
MATLAB fournit la commande diff pour calculer les dérivées symboliques. Sous sa forme la plus simple, vous passez la fonction que vous voulez dériver à la commande diff comme argument.
Par exemple, calculons la dérivée de la fonction f(t) = 3t2 + 2t-2
Exemple
Créez un fichier script et saisissez le code suivant :
syms t f = 3*t^2 + 2*t^(-2); diff(f)
Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant :
ans = 6*t - 4/t^3
Voici l'équivalent Octave du calcul ci-dessus :
pkg load symbolic symbols t = sym("t"); f = 3*t^2 + 2*t^(-2); differentiate(f,t)
Octave exécute le code et retourne le résultat suivant :
ans = -(4.0)*t^(-3.0)+(6.0)*t
Vérification des règles élémentaires de différentiation
Énonçons brièvement diverses équations ou règles pour la différentiation de fonctions et vérifions ces règles. Pour cela, nous écrirons f'(x) pour une dérivée du premier ordre et f"(x) pour une dérivée du second ordre.
Voici les règles de différentiation :
Règle 1
Pour quelles que soient les fonctions f et g et quels que soient les nombres réels a et b, la dérivée de la fonction :
h(x) = af(x) + bg(x) par rapport à x est donnée par :
h'(x) = af'(x) + bg'(x)
Règle 2
Les règles de somme et soustraction stipulent que si f et g sont deux fonctions, f' et g' sont leurs dérivées respectives, alors :
(f + g)' = f' + g'
(f - g)' = f' - g'
Règle 3
La règle du produit stipule que si f et g sont deux fonctions, f' et g' sont leurs dérivées respectives, alors :
(f.g)' = f'.g + g'.f
Règle 4
La règle du quotient stipule que si f et g sont deux fonctions, f' et g' sont leurs dérivées respectives, alors :
(f/g)' = (f'.g - g'.f)/g2
Règle 5
La règle des polynômes ou règle de puissance élémentaire stipule que, si y = f(x) = xn, alors f' = n. x(n-1)
Une conséquence directe de cette règle est que la dérivée de toute constante est zéro, c'est-à-dire, si y = k, toute constante, alors :
f' = 0
Règle 6
La règle de la chaîne stipule que la dérivée de la fonction d'une fonction h(x) = f(g(x)) par rapport à x est :
h'(x) = f'(g(x)).g'(x)
Exemple
Créez un fichier script et saisissez le code suivant :
syms x syms t f = (x + 2)*(x^2 + 3) der1 = diff(f) f = (t^2 + 3)*(sqrt(t) + t^3) der2 = diff(f) f = (x^2 - 2*x + 1)*(3*x^3 - 5*x^2 + 2) der3 = diff(f) f = (2*x^2 + 3*x)/(x^3 + 1) der4 = diff(f) f = (x^2 + 1)^17 der5 = diff(f) f = (t^3 + 3* t^2 + 5*t -9)^(-6) der6 = diff(f)
Lorsque vous exécutez le fichier, MATLAB affiche le résultat suivant :
f = (x^2 + 3)*(x + 2) der1 = 2*x*(x + 2) + x^2 + 3 f = (t^(1/2) + t^3)*(t^2 + 3) der2 = (t^2 + 3)*(3*t^2 + 1/(2*t^(1/2))) + 2*t*(t^(1/2) + t^3) f = (x^2 - 2*x + 1)*(3*x^3 - 5*x^2 + 2) der3 = (2*x - 2)*(3*x^3 - 5*x^2 + 2) - (- 9*x^2 + 10*x)*(x^2 - 2*x + 1) f = (2*x^2 + 3*x)/(x^3 + 1) der4 = (4*x + 3)/(x^3 + 1) - (3*x^2*(2*x^2 + 3*x))/(x^3 + 1)^2 f = (x^2 + 1)^17 der5 = 34*x*(x^2 + 1)^16 f = 1/(t^3 + 3*t^2 + 5*t - 9)^6 der6 = -(6*(3*t^2 + 6*t + 5))/(t^3 + 3*t^2 + 5*t - 9)^7
Voici l'équivalent Octave du calcul ci-dessus :
pkg load symbolic symbols x = sym("x"); t = sym("t"); f = (x + 2)*(x^2 + 3) der1 = differentiate(f,x) f = (t^2 + 3)*(t^(1/2) + t^3) der2 = differentiate(f,t) f = (x^2 - 2*x + 1)*(3*x^3 - 5*x^2 + 2) der3 = differentiate(f,x) f = (2*x^2 + 3*x)/(x^3 + 1) der4 = differentiate(f,x) f = (x^2 + 1)^17 der5 = differentiate(f,x) f = (t^3 + 3* t^2 + 5*t -9)^(-6) der6 = differentiate(f,t)
Octave exécute le code et retourne le résultat suivant :
f = (2.0+x)*(3.0+x^(2.0)) der1 = 3.0+x^(2.0)+(2.0)*(2.0+x)*x f = (t^(3.0)+sqrt(t))*(3.0+t^(2.0)) der2 = (2.0)*(t^(3.0)+sqrt(t))*t+((3.0)*t^(2.0)+(0.5)*t^(-0.5))*(3.0+t^(2.0)) f = (1.0+x^(2.0)-(2.0)*x)*(2.0-(5.0)*x^(2.0)+(3.0)*x^(3.0)) der3 = (-2.0+(2.0)*x)*(2.0-(5.0)*x^(2.0)+(3.0)*x^(3.0))+((9.0)*x^(2.0)-(10.0)*x)*(1.0+x^(2.0)-(2.0)*x) f = (1.0+x^(3.0))^(-1)*((2.0)*x^(2.0)+(3.0)*x) der4 = (1.0+x^(3.0))^(-1)*(3.0+(4.0)*x)-(3.0)*(1.0+x^(3.0))^(-2)*x^(2.0)*((2.0)*x^(2.0)+(3.0)*x) f = (1.0+x^(2.0))^(17.0) der5 = (34.0)*(1.0+x^(2.0))^(16.0)*x f = (-9.0+(3.0)*t^(2.0)+t^(3.0)+(5.0)*t)^(-6.0) der6 = -(6.0)*(-9.0+(3.0)*t^(2.0)+t^(3.0)+(5.0)*t)^(-7.0)*(5.0+(3.0)*t^(2.0)+(6.0)*t)
Dérivées des fonctions exponentielles, logarithmiques et trigonométriques
Le tableau suivant fournit les dérivées des fonctions exponentielles, logarithmiques et trigonométriques couramment utilisées :
| Fonction | Dérivée |
|---|---|
| ca.x | ca.x.ln c.a (ln est le logarithme naturel) |
| ex | ex |
| ln x | 1/x |
| lncx | 1/x.ln c |
| xx | xx.(1 + ln x) |
| sin(x) | cos(x) |
| cos(x) | -sin(x) |
| tan(x) | sec2(x), ou 1/cos2(x), ou 1 + tan2(x) |
| cot(x) | -csc2(x), ou -1/sin2(x), ou -(1 + cot2(x)) |
| sec(x) | sec(x).tan(x) |
| csc(x) | -csc(x).cot(x) |
Exemple
Créez un fichier script et saisissez le code suivant :
syms x y = exp(x) diff(y) y = x^9 diff(y) y = sin(x) diff(y) y = tan(x) diff(y) y = cos(x) diff(y) y = log(x) diff(y) y = log10(x) diff(y) y = sin(x)^2 diff(y) y = cos(3*x^2 + 2*x + 1) diff(y) y = exp(x)/sin(x) diff(y)
Lorsque vous exécutez le fichier, MATLAB affiche le résultat suivant :
y = exp(x) ans = exp(x) y = x^9 ans = 9*x^8 y = sin(x) ans = cos(x) y = tan(x) ans = tan(x)^2 + 1 y = cos(x) ans = -sin(x) y = log(x) ans = 1/x y = log(x)/log(10) ans = 1/(x*log(10)) y = sin(x)^2 ans = 2*cos(x)*sin(x) y = cos(3*x^2 + 2*x + 1) ans = -sin(3*x^2 + 2*x + 1)*(6*x + 2) y = exp(x)/sin(x) ans = exp(x)/sin(x) - (exp(x)*cos(x))/sin(x)^2
Voici l'équivalent Octave du calcul ci-dessus :
pkg load symbolic symbols x = sym("x"); y = Exp(x) differentiate(y,x) y = x^9 differentiate(y,x) y = Sin(x) differentiate(y,x) y = Tan(x) differentiate(y,x) y = Cos(x) differentiate(y,x) y = Log(x) differentiate(y,x) % le paquet symbolique n'a pas ce support %y = Log10(x) %differentiate(y,x) y = Sin(x)^2 differentiate(y,x) y = Cos(3*x^2 + 2*x + 1) differentiate(y,x) y = Exp(x)/Sin(x) differentiate(y,x)
Octave exécute le code et retourne le résultat suivant :
y = exp(x) ans = exp(x) y = x^(9.0) ans = (9.0)*x^(8.0) y = sin(x) ans = cos(x) y = tan(x) ans = 1+tan(x)^2 y = cos(x) ans = -sin(x) y = log(x) ans = x^(-1) y = sin(x)^(2.0) ans = (2.0)*sin(x)*cos(x) y = cos(1.0+(2.0)*x+(3.0)*x^(2.0)) ans = -(2.0+(6.0)*x)*sin(1.0+(2.0)*x+(3.0)*x^(2.0)) y = sin(x)^(-1)*exp(x) ans = sin(x)^(-1)*exp(x)-sin(x)^(-2)*cos(x)*exp(x)
Calcul des dérivées d'ordre supérieur
Pour calculer les dérivées d'ordre supérieur d'une fonction f, nous utilisons la syntaxe diff(f,n).
Calculons la dérivée seconde de la fonction y = f(x) = x .e-3x
f = x*exp(-3*x); diff(f, 2)
MATLAB exécute le code et retourne le résultat suivant :
ans = 9*x*exp(-3*x) - 6*exp(-3*x)
Voici l'équivalent Octave du calcul ci-dessus :
pkg load symbolic symbols x = sym("x"); f = x*Exp(-3*x); differentiate(f, x, 2)
Octave exécute le code et retourne le résultat suivant :
ans = (9.0)*exp(-(3.0)*x)*x-(6.0)*exp(-(3.0)*x)
Exemple
Dans cet exemple, résolvons un problème. Donnée une fonction y = f(x) = 3 sin(x) + 7 cos(5x). Nous devons déterminer si l'équation f" + f = -5cos(2x) est vraie.
Créez un fichier script et saisissez le code suivant :
syms x y = 3*sin(x)+7*cos(5*x); % définition de la fonction lhs = diff(y,2)+y; %évaluation du côté gauche de l'équation rhs = -5*cos(2*x); %côté droit de l'équation if(isequal(lhs,rhs)) disp('Oui, l\\'équation est vraie'); else disp('Non, l\\'équation n\\'est pas vraie'); end disp('Valeur du côté gauche est : '), disp(lhs);
Lorsque vous exécutez le fichier, il affiche le résultat suivant :
Non, l'équation n'est pas vraie Valeur du côté gauche est : -168*cos(5*x)
Voici l'équivalent Octave du calcul ci-dessus :
pkg load symbolic symbols x = sym("x"); y = 3*Sin(x)+7*Cos(5*x); % définition de la fonction lhs = differentiate(y, x, 2) + y; %évaluation du côté gauche de l'équation rhs = -5*Cos(2*x); %côté droit de l'équation if(lhs == rhs) disp('Oui, l\\'équation est vraie'); else disp('Non, l\\'équation n\\'est pas vraie'); end disp('Valeur du côté gauche est : '), disp(lhs);
Octave exécute le code et retourne le résultat suivant :
Non, l'équation n'est pas vraie Valeur du côté gauche est : -(168.0)*cos((5.0)*x)
Recherche des maxima et minima d'une courbe
Si nous recherchons les maxima et minima locaux pour un graphique, nous cherchons essentiellement les points les plus hauts ou les plus bas sur le graphique de la fonction à une localité particulière, ou pour une plage particulière de valeurs de la variable symbolique.
Pour une fonction y = f(x), les points sur le graphique où le graphique a une pente nulle sont appelés points stationnaires. En d'autres termes, les points stationnaires sont où f'(x) = 0.
Pour trouver les points stationnaires d'une fonction, nous la dérivons, nous devons mettre la dérivée égale à zéro et résoudre l'équation.
Exemple
Trouvons les points stationnaires de la fonction f(x) = 2x3 + 3x2 − 12x + 17
Suivez les étapes suivantes :
Premièrement, entrons la fonction et traçons son graphique.
syms x y = 2*x^3 + 3*x^2 - 12*x + 17; % définition de la fonction ezplot(y)
MATLAB exécute le code et retourne le graphique suivant :
Voici le code Octave équivalent pour l'exemple ci-dessus :
pkg load symbolic symbols x = sym('x'); y = inline("2*x^3 + 3*x^2 - 12*x + 17"); ezplot(y) print -deps graph.eps
Notre but est de trouver certains maxima et minima locaux sur le graphique, donc trouvons les maxima et minima locaux pour l'intervalle [-2, 2] sur le graphique.
syms x y = 2*x^3 + 3*x^2 - 12*x + 17; % définition de la fonction ezplot(y, [-2, 2])
MATLAB exécute le code et retourne le graphique suivant :
Voici le code Octave équivalent pour l'exemple ci-dessus :
pkg load symbolic symbols x = sym('x'); y = inline("2*x^3 + 3*x^2 - 12*x + 17"); ezplot(y, [-2, 2]) print -deps graph.eps
Ensuite, calculons la dérivée.
g = diff(y)
MATLAB exécute le code et retourne le résultat suivant :
g = 6*x^2 + 6*x - 12
Voici l'équivalent Octave du calcul ci-dessus :
pkg load symbolic symbols x = sym("x"); y = 2*x^3 + 3*x^2 - 12*x + 17; g = differentiate(y,x)
Octave exécute le code et retourne le résultat suivant :
g = -12.0+(6.0)*x+(6.0)*x^(2.0)
Résolvons la fonction dérivée, g, pour obtenir les valeurs où elle devient nulle.
s = solve(g)
MATLAB exécute le code et retourne le résultat suivant :
s = 1 -2
Voici l'équivalent Octave du calcul ci-dessus :
pkg load symbolic symbols x = sym("x"); y = 2*x^3 + 3*x^2 - 12*x + 17; g = differentiate(y,x) roots([6, 6, -12])
Octave exécute le code et retourne le résultat suivant :
g = -12.0+(6.0)*x^(2.0)+(6.0)*x ans = -2 1
Cela correspond à notre graphique. Évaluons maintenant la fonction f aux points critiques x = 1, -2. Nous pouvons substituer une valeur dans une fonction symbolique en utilisant la commande subs.
subs(y, 1), subs(y, -2)
MATLAB exécute le code et retourne le résultat suivant :
ans = 10 ans = 37
Voici l'équivalent Octave du calcul ci-dessus :
pkg load symbolic symbols x = sym("x"); y = 2*x^3 + 3*x^2 - 12*x + 17; g = differentiate(y,x) roots([6, 6, -12]) subs(y, x, 1), subs(y, x, -2)
ans = 10.0 ans = 37.0-4.6734207789940138748E-18*I
Par conséquent, les valeurs minimale et maximale sur la fonction f(x) = 2x3 + 3x2 − 12x + 17, dans l'intervalle [-2,2] sont 10 et 37.
Résolution d'équations différentielles
MATLAB fournit la commande dsolve pour résoudre les équations différentielles symboliquement.
La forme la plus basique de la commande dsolve pour trouver la solution d'une seule équation est :
dsolve('eqn')
où eqn est une chaîne de texte utilisée pour entrer l'équation.
Elle retourne une solution symbolique avec un ensemble de constantes arbitraires que MATLAB étiquette C1, C2, et ainsi de suite.
Vous pouvez également spécifier des conditions initiales et aux limites pour le problème, sous forme de liste délimitée par des virgules suivant l'équation :
dsolve('eqn','cond1', 'cond2',…)
Pour l'utilisation de la commande dsolve, les dérivées sont indiquées avec un D. Par exemple, une équation comme f'(t) = -2*f + cost(t) est entrée comme :
'Df = -2*f + cos(t)'
Les dérivées d'ordre supérieur sont indiquées en suivant D par l'ordre de la dérivée.
Par exemple, l'équation f"(x) + 2f'(x) = 5sin3x doit être entrée comme :
'D2y + 2Dy = 5*sin(3*x)'
Prenons un exemple simple d'une équation différentielle du premier ordre : y' = 5y.
s = dsolve('Dy = 5*y')
MATLAB exécute le code et retourne le résultat suivant :
s = C2*exp(5*t)
Prenons un autre exemple d'une équation différentielle du second ordre : y" - y = 0, y(0) = -1, y'(0) = 2.
dsolve('D2y - y = 0','y(0) = -1','Dy(0) = 2')
MATLAB exécute le code et retourne le résultat suivant :
ans = exp(t)/2 - (3*exp(-t))/2
MATLAB
- Qu'est-ce qu'un différentiel ? Comprendre son rôle, ses types et sa maintenance
- Types de données MATLAB : Guide complet
- Maîtriser les opérateurs MATLAB : Arithmétiques, Logiques, Bitwise et Ensemblistes
- Maîtriser les matrices MATLAB : Création, indexation et manipulation
- MATLAB : Maîtriser les tableaux multidimensionnels et spéciaux
- Maîtriser la notation deux-points de MATLAB : créer des vecteurs et itérer efficacement
- MATLAB - Nombres : Types, stockage et conversion
- Maîtriser les chaînes de caractères MATLAB : création et utilisation faciles
- Fonctions MATLAB : définition, espace de travail, entrées et sorties