Skip to article frontmatterSkip to article content

Bruchrechnung - mit angezeigtem Code


Dieses Notebook ist als Zusatz für alle diejenigen gedacht, die gerne wissen und verstehen wollen, wie diese Notebooks aufgabaut sind und was an Code dahinter steckt.

Hier zum Thema “Bruchrechnung”


#Zunächst muss sympy wieder importiert werden
from sympy import*
import random

Umgang mit Brüchen und Dezimalzahlen

Wenn Sympy mit Dezimalzahlen arbeitet, egal wo, sind diese meist “nur” auf 15 Nachkommastellen genau. Das bedeutet, das Weiterrechnen ist damit extrem unhandlich. Deshalb ist es sinnvoll, alle Zahlen als Brüche darzustellen.

Dies tun Sie, indem Sie Zahlen folgendermaßen schreiben:

13= \frac{1}{3} = S(1)/S(3)oder Rational(1,3)

Hier ist noch einmal anschaulich dargestellt, was sympy aus Divisionen macht:

#Führen Sie die Zelle aus, um zu sehen, wie 1/3 dargestellt wird
1/3

Sehen Sie sich im Gegensatz dazu an, was passiert, wenn 13= \frac{1}{3} = S(1)/S(3)oder Rational(1,3) verwendet wird.

#Führen Sie die Zelle aus
S(1)/S(3)
#Führen Sie die Zelle aus
Rational(1,3)

Wir subtrahieren 1/3 und Rational(1,3).

#Führen Sie die Zelle aus
1/3-Rational(1,3)

In diesem Fall ist das Ergebnis zwar 0, die beiden Zahlen sind also gleichwertig, sympy behandelt sie aber intern nicht so. Das zeigt die folgende Zelle.

Dort testen wir die Gleichheit der beiden Terme. Hierfür wird der Operator ==, also das doppelte Gleichheitszeichen verwendet.

#Führen Sie die Zelle aus
1/3 == Rational(1,3)

False bedeutet, dass sympy die beiden Ausdrücke nicht als gleich wertet.

sympify

Wir werfen nochmal einen genaueren Blick auf S(1)/(3).

“Sympifizieren” bedeutet, einen gewöhnlichen Python-Ausdruck, wie es etwa 1/3 ist, in einen sympy-Ausruck umzuformen, sodass sympy damit arbeiten kann. S(1)/(3) tut genau dies. Stattdessen kann auch der Befehl sympify verwendet werden.

#sympify
#Führen Sie diese Zelle aus
sympify('2**2 / 3 + 5')

Vereinfachung von Bruchtermen

simplify und radsimp

Eine allgemeine Funktion, um mathematische Ausdrücke zu vereinfachen, ist der Befehl simplify.

Generell besitzt sympy viele Funktionen und Möglichkeiten zur Vereinfachung von Termen. Behandelt wurden davon im Notebook zu “Rechenregeln - mit angezeigtem Code” bereits factor und expand.

simplify versucht alle möglichen Vereinfachungen zu vereinen und auf den jeweiligen Term anzuwenden, um zur einfachsten Form des mathematischen Ausdrucks zu gelangen. Was hier jedoch die einfachste Form ist, ist nicht genau definiert. Im Folgenden sehen wir uns zwei Beispiele an, in denen simplify funktioniert bzw. nicht funktioniert.

  1. Beispiel:

x3+x2x1x2+2x+1    \frac{x^3 + x^2 - x- 1}{x^2 + 2x +1} \ \ \ soll vereinfacht werden.

#Führen Sie diese Zelle aus
x = symbols('x')
b1 = simplify((x**3 + x**2 - x - 1)/(x**2 + 2*x + 1))
b1

Sympy führt die Polynomdivision automatisch aus und vereinfacht den Term.

  1. Beispiel:

x+2y33xy15    \frac{x +2y}{3} - \frac{3x-y}{15} \ \ \ soll vereinfacht werden.

#Führen Sie diese Zelle aus
x,y = symbols("x,y")
b2 = simplify((x+2*y)/3 - (3*x - y)/15)
b2

Sympy vereinfacht hier die Brüche nicht (immer) zu einem Bruch.

Hierfür verwenden wir den Befehl radsimp.

#Führen Sie diese Zelle aus
b2_2 = radsimp((x+2*y)/3 - (3*x - y)/15)
b2_2

Für die Vereinfachung von Brüchen ist deshalb radsimp besser.

Übungen

  1. Vereinfachen Sie den Bruch mit Hilfe von sympy so weit wie möglich. Verwenden Sie alle Vereinfachungsmöglichkeiten, die Sie in den Notebooks bisher kennengelernt haben.
3x(b+c)5b+5c\frac{3x(b+c)}{5b+5c}
#Schreiben Sie Ihren Code in diese Zelle

Klicken Sie für die Lösung auf die drei Punkte.

#Zelle einklappen

#Lösung
#zunächst müssen die Variablen als Symbole definiert werden, falls noch nicht geschehen
x,b,c = symbols('x,b,c')

#Darstellen des Terms mit sympy
term = (3*x*(b+c))/(5*b+5*c)
term
#Zelle einklappen

#Vereinfachen des Terms
factor(term)
  1. Vereinfachen Sie soweit wie möglich:
8t+4+2t+1-\frac{8}{t+4} + \frac{2}{t+1}
#Your Code here
#Zelle einklappen

#Lösung
#zuerst werden die Variablen als Symbole definiert
t = symbols('t')

#Darstellen des Terms in der Aufgabe
term_2 = -(8/(t+4))+(2/(t+1))
term_2
#Zelle einklappen

#Vereinfachen des Terms
radsimp(term_2)
#Zelle einklappen

#Die Vereinfachung funktioniert natürlich auch so:
radsimp(-(8/(t+4))+(2/(t+1)))