Skip to content

Einführung ins symbolische Rechnen

  • Bietet Funktionen zur Lösung, Darstellung und Umformung von symbolischen Gleichungen.
  • Analytische Operationen wie z.B. Differenzierung, Integration oder Transformation können automatisch durchgeführt werden.

Definition von symbolischen Variablen

  • Deklaration erfolgt über die Befehle sym und syms.
  • Es ist möglich, einzelne Werte symbolisch zu speichern.
    >> x = sym(2/3)
      x =
        2/3
    >> 
    

Aufgabe

Was ist der Unterschied zwischen x=2/3 und x=sym(2/3)?

  • Mehrere Variablen sind wie folgt zu deklarieren:
    >> syms a b c
    
  • Nach der Definition werden die Variablen a,b und c als symbolische Variablen behandelt.
    >> a * 3
    ans =
    3*a
    
  • Mit dem Befehl whos werden alle definierten Variablen angezeigt. Es besteht die Möglichkeit mit syms nur symbolische Variablen anzeigen zu lassen
    >> syms
    Your symbolic variables are:
    a  b  c                                 
    

Definition von symbolischen Ausdrücken

  • Nach dem die einzelne Variablen definiert sind, können symbolische Ausdrücke in einer neuen Variable definiert werden
    >> syms x
    >> y = x^3 + 3*x^2 - 4*x + 2
    y =
    x^3 + 3*x^2 - 4*x + 2
    
  • Ein Ausdruck kann auch mehrere symbolische Größen beinhalten
    syms a b c x
    >> v= a*x^2 + b*x + c
    v =
    a*x^2 + b*x + c
    
  • Weitere symbolische Ausdrücke können als kombination der definierten Ausdrücke berechnet werden
    >> y + v
    ans =
    2*a*x^2 + 2*b*x + 2*c
    

    oder
    >> 2*v-y*pi
    ans =
    2*c + 2*b*x - pi*(a*x^2 + b*x + c) + 2*a*x^2
    

Aufgabe

Definieren und vereinfachen Sie den folgenden Term

\[ \frac{a^3+2\cdot a}{a(a+3)} \]

mit

\[ a = -2x+6y \]

Lösung

>> syms x y a
>> a = -2 * x + 6 * y
a =
6*y - 2*x
>> a^3+2*a/(a*(a+3))
ans =
(4*x - 12*y)/((2*x - 6*y)*(6*y - 2*x + 3)) - (2*x - 6*y)^3

Lösen von symbolischen Gleichungen

  • Symbolische Ausrücke werden durch das == gleichgesetzt.
    >> v==y
    ans =
    a*x^2 + b*x + c == a*x^2 + b*x + c
    
  • Gleichungen können in einer Variable gespeichert werden:
    >> Gl=v==y
    Gl =
    a*x^2 + b*x + c == a*x^2 + b*x + c
    

Beispiel

Lösen Sie die folgende Gleichung mit MATLAB:

\[ \frac{x}{4} + \frac{1}{2} = 12 \]

  • Verwenden der solve-Funktion:
    >> syms x
    >> solve(x/4 + 1/2 == 12, x)
    ans =
    46
    

  • Alternativ: mit der Definition von Ausdruck A1 und Gleichung G1
>> syms x
>> A1 = x/4 + 1/2;
>> G1 = A1 == 12;
>> solve(G1, x)
ans =
46

Aufgabe

Lösen Sie die folgende Gleichung:

\[ x^{10} + 6x^9 + 5x^8 = 0 \]

Lösung

>> syms x
>> solve(x^10 + 6*x^9 + 5*x^8 == 0, x)'
ans =
[ -5, -1, 0, 0, 0, 0, 0, 0, 0, 0]

Aufgabe

Lösen Sie die folgenden Gleichung:

\[ x^3+7x^2-x-87 = 0 \]

Lösung

>> syms x
>> solve(x^3 + 7*x^2 - x - 87, x)'
ans =
[ 3, - 5 + 2i, - 5 - 2i]

Beispiel

Geben Sie die reellen Lösungen der vorangegangen Gleichung an.


Verwenden des optimalen Parameters Real der solve-Funktion:

>> syms x
>> solve(x^3 + 7*x^2 - x - 87, x, 'Real', true)
ans =
3

Verwenden der assume-Funktion:

>> syms x
>> assume(x, 'Real')
>> solve(x^3 + 7*x^2 - x - 87, x)
ans =
3

Aufgabe

Welche komplexe Zahl weißt die folgende Eigenschaft auf:

\[ a^2 = \frac{1}{a} \]

Lösung

>> syms a
>> a_ = solve(a^2 == 1/a, a)
a_ =
                      1
- (3^(1/2)*1i)/2 - 1/2
  (3^(1/2)*1i)/2 - 1/2
>> abs(a_)'
ans =
[ 1, 1, 1]
>> rad2deg(angle(a_))'
ans =
[ 0, -120, 120]

Aufgabe

Lösen Sie die folgende Gleichung:

\[ \cos x = x \]

Lösung

>> syms x
>> solve(cos(x) == x, x)
Warning: Unable to solve symbolically. Returning a numeric solution
using vpasolve. 
> In solve (line 304) 
ans =
0.73908513321516064165531208767387

Rekursive Lösung:

x = 1;
for i = 1:100
    x = cos(x);
end

x

  • Besitzt eine Gleichung mehrere Lösungen, so bekommt man einen Ergebnissvektor
    >> solve(x^2 == 4,x)
    ans =
     -2
      2
    
  • Sind mehrere symbolische Variablen vorhanden, so wird nach der gewünschten umgestellt
    >> syms x a b
    >> solve(a * x^2 + b*x == 3, a)
    ans =
    -(b*x - 3)/x^2
    

Beispiel

Lösen die das folgende Gleichungssystem:

\[ a \cdot x = 15 \]
\[ a - x = 5.5 \]

Syntax der solve-Funktion: [Lösung1, Lösung2,...]=solve([Gleichung1,Gleichung1,...],[Variable1,Variable2,...])

>> [Lsga, Lsgx] = solve([a * x == 15, a - x == 5.5], [a, x])
Lsga =
  -2
15/2
Lsgx =
-15/2
  2

Aufgabe

Lösen Sie das lineare Gleichungssystem

\[ 2x+3y=14 \]
\[ -2x+6y=23 \]

Definieren Sie eine Ergebnisvariable. Welches Konstrukt sehen Sie im Variablen-Manager?

Lösung

>> syms x y
>> [Lsgx,Lsgy]=solve([2*x+3*y==14, -2*x+6*y==23],[x,y])
Lsgx =
5/6
Lsgy =
37/9

Aufgabe

Untersuchen Sie das Verhalten der Symbolic Toolbox, wenn ein lineares Gleichungssystem keine oder unendliche viele Lösungen besitzt. Verwenden Sie die folgenden Gleichungen:

\[ \begin{pmatrix} 10 & 5 \\ -4 & -2 \end{pmatrix} \cdot \begin{pmatrix} x \\ y \end{pmatrix} = \begin{pmatrix} 15 \\ 8 \end{pmatrix} \]
\[ \begin{pmatrix} 10 & 5 \\ -4 & -2 \end{pmatrix} \cdot \begin{pmatrix} x \\ y \end{pmatrix} = \begin{pmatrix} 30 \\ -12 \end{pmatrix} \]

Lösung

keine Lösungen:

>> syms x,y
>> solve([10 5; -4 -2] * [x;y] == [15;8], [x, y])
ans = 
  struct with fields:

    x: [0×1 sym]
    y: [0×1 sym]

unendlich viele Lösungen:

>> L = solve([10 5; -4 -2] * [x;y] == [30;-12], [x, y])
L = 
  struct with fields:

    x: [1×1 sym]
    y: [1×1 sym]
>> L.x, L.y
ans =
3
ans =
0

Termmanipulation

Termmanipulation

  • Abgesehen vom Umstellen können weitere Werkzeuge sehr nützlich sein:

    • Vereinfachung: simplify
    • Faktorisierung: factor
    • Erweiterung: expand
    • und diverse weitere Operationen, siehe Rearrange Expression

Aufgabe

Vereinfachen Sie den Ausdruck

\[x\cdot (x+2)^2-4\cdot x\]

Lösung

>> simplify(x*(x+2)^2-4*x)
ans =
x^2*(x + 4)
>> expand(x*(x+2)^2-4*x)
ans =
x^3 + 4*x^2

Aufgabe

Vereinfachen Sie den folgenden Term:

\[ \frac{\frac{a+b}{a} + \frac{a+b}{b}}{\frac{1}{a}+\frac{1}{b}} \]

Lösung

>> syms a b
>> T = ( (a+b)/a + (a+b)/b ) / ( 1/a + 1/b);
>> simplify(T)
ans =
a + b

Aufgabe

Vereinfachen Sie den folgenden Term:

\[ \frac{5a-6b}{30c^2} - \frac{b(5c^2-3a)}{15ac^2} + \frac{a(3c^2-2b)}{12bc^2} - \frac{a}{4b} + \frac{b}{3a} \]

Lösung

>> syms a b c
>> T = (5*a-6*b) / (30*c^2) - (b*(5*c^2-3*a))/(15*a*c^2) + (a*(3*c^2-2*b)) / (12*b*c^2) - a/(4*b) + b/(3*a);
>> simplify(T)
ans =
0

Beispiel

Führen Sie eine Polynomdivision mit Hilfe des folgenden Bruches durch:

\[ (a^2-10a-25) : (a-5) \]

Verwendung der quorem-Funktion: [Quotient, Rest] = quorem(Zähler, Nenner)

>> syms a
>> [q, r] = quorem(a^2 - 10*a - 25, a - 5)
q =
a - 5
r =
-50
>> 
\[ (a^2-10a-25) : (a-5) = a - 5 - \frac{50}{a-5} \]

Aufgabe

Führen Sie die folgenden Polynomdivision durch:

\[ (16x^8-x^4+9) : (4x^4-5x^2+3) \]

Lösung

>> syms x
>> [q, r] = quorem(16*x^8 - x^4 + 9, 4*x^4 - 5*x^2 + 3)
q =
4*x^4 + 5*x^2 + 3
r =
0

Definition von symbolischen Funktionen

Symbolische Funktionen

  • Mathematische Funktionen werden in recht einfacher Weiße definiert
    >> syms x
    >> f(x)=3*x^2+1
    f(x) =
    3*x^2 + 1
    
  • Anschließend können Funktionswerte direkt berechnet werden
    >> f(2)
    ans =
    13
    >> f(-1)
    ans =
    4
    

Aufgabe

Definieren Sie eine Funktion für die Berechnung der Fläche eines Kreises.

Lösung

>> syms r
>> Ak(r)=pi*r^2
Ak(r) =
pi*r^2

Mehrere Variablen

Funktionen mehrere Abhängiger können analog definiert werden, dabei werden die einzelne Variablen mit Komma getrennt

>> syms x y
>> g(x,y)=4*x-3*y
g(x, y) =
4*x - 3*y

Aufgabe

Definieren Sie eine Funktion für die Berechnung vom Flächeninhalt einer Ellipse. Setzen Sie die Radien von 3 und 5 in die Funktion ein.

Lösung

>> syms x y
>> Ae(x,y)=pi*x*y
Ae(x, y) =
pi*x*y
>> Ae(3,5)
ans =
15*pi
>> eval(ans)
ans =
  47.1239

Visualisierung der Funktionen

  • Grundsätzlich erfolgt die Visualisierung von Funktionen mit dem fplot Befehl
    >> syms r
    >> f(r)=pi*r^2;
    >> fplot(f)
    
  • Mehrdimensionale Funktionen können auf verschiedene Art und Weiße dargestellt werden. So ist eine Variante durch die implizite Darstellung möglich, indem man der Funktionen einen bestimmten Wert zuweist
    >> syms x y
    >> g(x,y)=pi*x*y;
    >> fimplicit(g==5)
    

Aufgabe

Kontrollieren Sie die Ergebnisse, in dem Sie die abgelesenen Werte von der Implizitdarstellung in die Funktion einsetzen.

Lösung

>> g(3.2,0.4974)
ans =
(4974*pi)/3125
>> eval(ans)
ans =
5.0004

Plot

  • Soll ein Bild für mehrere Werte angezeigt werden, so ist fcontour sehr nützlich. Zusätzlich kann die Sichtbarkeit von gewünschten Werten durch fcontour(g,'LevelList',[1 4 9 16]) beeinflusst werden
    >> fcontour(g,'LevelList',[1 3 5 6])
    

Symbolische Integral- und Differentialrechnung

Ableitungen und Integrale

  • Symbolische Ausdrücke oder Funktionen können mit Hilfe von diff Befehl abgeleitet werden. Dabei hat der Befehl folgende Struktur diff(Ausdruck,Variable)
    >> syms x
    >> d=x^3+2*x^2-4*x+2
    d =
    x^3 + 2*x^2 - 4*x + 2
    >> dx=diff(d,x)
    dx =
    3*x^2 + 4*x - 4
    
  • Sind mehrere Variablen vorhanden, so wird nach der angegebener abgeleitet!
  • Höhere Ableitungsgrade sind möglich, so ist z.B. die zweite Ableitung durch eine Komma getrennte 2 in der Klammer vom diff Befehl realisierbar
    >> dx=diff(d,x,2)
    dx =
    6*x + 4
    
  • Analog lassen sich unbestimmte Integrale mit dem Befehl int(Ausdruck,Variable) finden
    >> int(d,x)
    ans =
    x^4/4 + (2*x^3)/3 - 2*x^2 + 2*x
    
  • Achtung: die Integrationskonstante wird nicht berücksichtigt bzw. angezeigt
  • Bestimmte Integrale lassen sich durch die Angabe des Integrationsbereichs berechnen
    >> int(d,x,[0 5])
    ans =
    2395/12
    

Beispiel

Lösen Sie die Differentialgleichung \(T\cdot\dot y(t) + y(t) = 1\) mit der Anfangsbedingung \(y(0) = 0\).


  • Allgemeine Verwendung des dsolve-Befehls:
    dsolve(DiffGL, [Anfangsbedingung1, Anfangsbedingung2, ...])
  • Definition des symbolischen Variablen
    >> syms T t y(t)
    
  • Definition der DGL:
    >> DGL = T * diff(y(t), t) + y(t) == 1
    
  • Lösen der DGL:
      >> dsolve(DGL, y(0) == 0)
    ans =
    1 - exp(-t/T)