Symbolische Ableitungen in MATLAB mit dem diff-Befehl berechnen
MATLAB bietet den Befehl diff zur Berechnung symbolischer Ableitungen. In seiner einfachsten Form übergeben Sie die Funktion, die Sie differenzieren möchten, als Argument an den diff-Befehl.
Beispiel: Berechnen wir die Ableitung der Funktion f(t) = 3t2 + 2t-2.
Beispiel
Erstellen Sie eine Skriptdatei und geben Sie folgenden Code ein:
syms t f = 3*t^2 + 2*t^(-2); diff(f)
Beim Kompilieren und Ausführen des obigen Codes wird folgendes Ergebnis erzeugt:
ans = 6*t - 4/t^3
Folgendes ist das Octave-Äquivalent der obigen Berechnung:
pkg load symbolic symbols t = sym("t"); f = 3*t^2 + 2*t^(-2); differentiate(f,t)
Octave führt den Code aus und gibt folgendes Ergebnis zurück:
ans = -(4.0)*t^(-3.0)+(6.0)*t
Überprüfung elementarer Differentiationsregeln
Lassen Sie uns kurz verschiedene Gleichungen oder Regeln für die Differentiation von Funktionen angeben und diese Regeln überprüfen. Zu diesem Zweck schreiben wir f'(x) für eine Ableitung erster Ordnung und f"(x) für eine Ableitung zweiter Ordnung.
Folgend sind die Differentiationsregeln:
Regel 1
Für beliebige Funktionen f und g und beliebige reelle Zahlen a und b ist die Ableitung der Funktion
h(x) = a f(x) + b g(x) nach x gegeben durch:
h'(x) = a f'(x) + b g'(x)
Regel 2
Die Summen- und Subtraktionsregeln besagen, dass wenn f und g zwei Funktionen sind, f' und g' ihre Ableitungen sind, dann:
(f + g)' = f' + g'
(f - g)' = f' - g'
Regel 3
Die Produktregel besagt, dass wenn f und g zwei Funktionen sind, f' und g' ihre Ableitungen sind, dann:
(f·g)' = f'·g + g'·f
Regel 4
Die Quotientenregel besagt, dass wenn f und g zwei Funktionen sind, f' und g' ihre Ableitungen sind, dann:
(f/g)' = (f'·g - g'·f)/g2
Regel 5
Die Potenzregel (oder elementare Potenzregel) besagt, dass wenn y = f(x) = xn, dann f' = n·x(n-1).
Eine direkte Folge dieser Regel ist, dass die Ableitung jeder Konstanten null ist, d. h., wenn y = k, eine beliebige Konstante, dann:
f' = 0
Regel 6
Die Kettenregel besagt, dass die Ableitung der Funktion einer Funktion h(x) = f(g(x)) nach x ist:
h'(x) = f'(g(x))·g'(x)
Beispiel
Erstellen Sie eine Skriptdatei und geben Sie folgenden Code ein:
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)
Beim Ausführen der Datei zeigt MATLAB folgendes Ergebnis:
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
Folgendes ist das Octave-Äquivalent der obigen Berechnung:
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 führt den Code aus und gibt folgendes Ergebnis zurück:
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)
Ableitungen exponentieller, logarithmischer und trigonometrischer Funktionen
Die folgende Tabelle enthält die Ableitungen häufig verwendeter exponentieller, logarithmischer und trigonometrischer Funktionen:
| Funktion | Ableitung |
|---|---|
| ca·x | ca·x·ln c·a (ln ist natürlicher Logarithmus) |
| ex | ex |
| ln x | 1/x |
| logcx | 1/(x·ln c) |
| xx | xx·(1 + ln x) |
| sin(x) | cos(x) |
| cos(x) | -sin(x) |
| tan(x) | sec2(x), oder 1/cos2(x), oder 1 + tan2(x) |
| cot(x) | -csc2(x), oder -1/sin2(x), oder -(1 + cot2(x)) |
| sec(x) | sec(x)·tan(x) |
| csc(x) | -csc(x)·cot(x) |
Beispiel
Erstellen Sie eine Skriptdatei und geben Sie folgenden Code ein:
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)
Beim Ausführen der Datei zeigt MATLAB folgendes Ergebnis:
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
Folgendes ist das Octave-Äquivalent der obigen Berechnung:
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) % symbolic Paket hat diese Unterstützung nicht %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 führt den Code aus und gibt folgendes Ergebnis zurück:
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)
Höhere Ableitungen berechnen
Um höhere Ableitungen einer Funktion f zu berechnen, verwenden wir die Syntax diff(f,n).
Berechnen wir die zweite Ableitung der Funktion y = f(x) = x·e-3x:
f = x*exp(-3*x); diff(f, 2)
MATLAB führt den Code aus und gibt folgendes Ergebnis zurück:
ans = 9*x*exp(-3*x) - 6*exp(-3*x)
Folgendes ist das Octave-Äquivalent der obigen Berechnung:
pkg load symbolic symbols x = sym("x"); f = x*Exp(-3*x); differentiate(f, x, 2)
Octave führt den Code aus und gibt folgendes Ergebnis zurück:
ans = (9.0)*exp(-(3.0)*x)*x-(6.0)*exp(-(3.0)*x)
Beispiel
In diesem Beispiel lösen wir ein Problem. Gegeben sei eine Funktion y = f(x) = 3 sin(x) + 7 cos(5x). Wir müssen herausfinden, ob die Gleichung f" + f = -5cos(2x) zutrifft.
Erstellen Sie eine Skriptdatei und geben Sie folgenden Code ein:
syms x y = 3*sin(x)+7*cos(5*x); % Funktion definieren lhs = diff(y,2)+y; % Auswerten der linken Seite der Gleichung rhs = -5*cos(2*x); % rechte Seite der Gleichung if(isequal(lhs,rhs)) disp('Yes, the equation holds true'); else disp('No, the equation does not hold true'); end disp('Value of LHS is: '), disp(lhs);
Beim Ausführen der Datei wird folgendes Ergebnis angezeigt:
No, the equation does not hold true Value of LHS is: -168*cos(5*x)
Folgendes ist das Octave-Äquivalent der obigen Berechnung:
pkg load symbolic symbols x = sym("x"); y = 3*Sin(x)+7*Cos(5*x); % Funktion definieren lhs = differentiate(y, x, 2) + y; % Auswerten der linken Seite der Gleichung rhs = -5*Cos(2*x); % rechte Seite der Gleichung if(lhs == rhs) disp('Yes, the equation holds true'); else disp('No, the equation does not hold true'); end disp('Value of LHS is: '), disp(lhs);
Octave führt den Code aus und gibt folgendes Ergebnis zurück:
No, the equation does not hold true Value of LHS is: -(168.0)*cos((5.0)*x)
Maxima und Minima einer Kurve finden
Wenn wir nach lokalen Maxima und Minima für einen Graphen suchen, suchen wir im Grunde nach den höchsten oder niedrigsten Punkten auf dem Graphen der Funktion in einer bestimmten Umgebung oder für einen bestimmten Wertebereich der symbolischen Variable.
Für eine Funktion y = f(x) heißen die Punkte auf dem Graphen, an denen der Graph eine Steigung von null hat, stationäre Punkte. Mit anderen Worten: Stationäre Punkte sind dort, wo f'(x) = 0.
Um die stationären Punkte einer Funktion zu finden, differenzieren wir, setzen die Ableitung gleich null und lösen die Gleichung.
Beispiel
Finden wir die stationären Punkte der Funktion f(x) = 2x3 + 3x2 − 12x + 17.
Führen Sie folgende Schritte aus:
Zuerst geben wir die Funktion ein und plotten ihren Graphen.
syms x y = 2*x^3 + 3*x^2 - 12*x + 17; % Funktion definieren ezplot(y)
MATLAB führt den Code aus und gibt den folgenden Plot zurück:
Hier ist der äquivalente Octave-Code für das obige Beispiel:
pkg load symbolic symbols x = sym('x'); y = inline("2*x^3 + 3*x^2 - 12*x + 17"); ezplot(y) print -deps graph.eps
Unser Ziel ist es, einige lokale Maxima und Minima auf dem Graphen zu finden. Lassen Sie uns die lokalen Maxima und Minima für das Intervall [-2, 2] auf dem Graphen finden.
syms x y = 2*x^3 + 3*x^2 - 12*x + 17; % Funktion definieren ezplot(y, [-2, 2])
MATLAB führt den Code aus und gibt den folgenden Plot zurück:
Hier ist der äquivalente Octave-Code für das obige Beispiel:
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
Als Nächstes berechnen wir die Ableitung.
g = diff(y)
MATLAB führt den Code aus und gibt folgendes Ergebnis zurück:
g = 6*x^2 + 6*x - 12
Hier ist das Octave-Äquivalent der obigen Berechnung:
pkg load symbolic symbols x = sym("x"); y = 2*x^3 + 3*x^2 - 12*x + 17; g = differentiate(y,x)
Octave führt den Code aus und gibt folgendes Ergebnis zurück:
g = -12.0+(6.0)*x+(6.0)*x^(2.0)
Lösen wir die Ableitungsfunktion g, um die Werte zu erhalten, an denen sie null wird.
s = solve(g)
MATLAB führt den Code aus und gibt folgendes Ergebnis zurück:
s = 1 -2
Folgendes ist das Octave-Äquivalent der obigen Berechnung:
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 führt den Code aus und gibt folgendes Ergebnis zurück:
g = -12.0+(6.0)*x^(2.0)+(6.0)*x ans = -2 1
Dies stimmt mit unserem Plot überein. Lassen Sie uns die Funktion f an den kritischen Stellen x = 1, -2 auswerten. Wir können einen Wert in eine symbolische Funktion einsetzen, indem wir den Befehl subs verwenden.
subs(y, 1), subs(y, -2)
MATLAB führt den Code aus und gibt folgendes Ergebnis zurück:
ans = 10 ans = 37
Folgendes ist das Octave-Äquivalent der obigen Berechnung:
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
Daher betragen die minimalen und maximalen Werte der Funktion f(x) = 2x3 + 3x2 − 12x + 17 im Intervall [-2,2] 10 und 37.
Differentialgleichungen lösen
MATLAB bietet den Befehl dsolve zum symbolischen Lösen von Differentialgleichungen.
Die einfachste Form des dsolve-Befehls zur Lösung einer einzelnen Gleichung ist:
dsolve('eqn')
wobei eqn ein Textstring ist, der zur Eingabe der Gleichung verwendet wird.
Er gibt eine symbolische Lösung mit einer Menge willkürlicher Konstanten zurück, die MATLAB als C1, C2 usw. kennzeichnet.
Sie können auch Anfangs- und Randbedingungen für das Problem als kommagetrennte Liste nach der Gleichung angeben:
dsolve('eqn','cond1', 'cond2',…)
Für die Verwendung des dsolve-Befehls werden Ableitungen mit einem D angegeben. Zum Beispiel wird eine Gleichung wie f'(t) = -2*f + cost(t) als folgt eingegeben:
'Df = -2*f + cos(t)'
Höhere Ableitungen werden durch Anhängen der Ableitungsordnung an D angegeben.
Zum Beispiel sollte die Gleichung f"(x) + 2f'(x) = 5sin3x als folgt eingegeben werden:
'D2y + 2Dy = 5*sin(3*x)'
Nehmen wir ein einfaches Beispiel einer Differentialgleichung erster Ordnung: y' = 5y.
s = dsolve('Dy = 5*y')
MATLAB führt den Code aus und gibt folgendes Ergebnis zurück:
s = C2*exp(5*t)
Nehmen wir ein weiteres Beispiel einer Differentialgleichung zweiter Ordnung: y" - y = 0, y(0) = -1, y'(0) = 2.
dsolve('D2y - y = 0','y(0) = -1','Dy(0) = 2')
MATLAB führt den Code aus und gibt folgendes Ergebnis zurück:
ans = exp(t)/2 - (3*exp(-t))/2
MATLAB
- Was ist ein Differential? Rolle, Typen und Wartung verstehen
- Differentialöl erklärt: Zweck, Typen und Wartung
- MATLAB Datentypen: Umfassender Leitfaden
- MATLAB Operatoren meistern: Arithmetik, Logik, Bitweise Operationen
- MATLAB Matrizen Grundlagen: Erstellen, Referenzieren, Manipulieren
- MATLAB: Mehrdimensionale und spezielle Arrays meistern
- MATLAB-Colon-Notation meistern: Vektoren erstellen & effizient iterieren
- MATLAB – Zahlen: Typen, Speicherung und Konvertierung
- MATLAB Strings meistern: Einfache Erstellung & Verwendung
- MATLAB-Funktionen: Definition, Workspace, Ein- & Ausgaben