Funktionen in der Programmierung

Eine Funktion ist in der Programmierung die Definition eines Programmbereichs, welches durch einen Funktionsaufruf immer wieder verwendbar ist. In manchen Programmiersprachen werden Funktionen von Prozeduren oder Unterprogrammen unterschieden, insofern, dass Funktionen eine Rückgabe zurückliefern, Prozeduren oder Unterprogramme jedoch nicht. In Python gibt es diese Unterscheidung nicht, eine Funktion in Python liefert immer einen Wert zurück - dies kann aber auch kein Wert, also None sein. Dabei kann eine Funktion die unterschiedlichsten Objekte zurückliefern. Die Rückgabewerte können daher normale Datentypen (Integer, Float, etc.) sein, aber auch Listen, Strings, etc. oder auch Funktionen selbst.

Damit ist der Funktionsbegriff in der Python-Programmierung umfassender als der Funktionsbegriff in der Mathematik definiert. Dennoch kann man den Funktionsbegriff in der Programmierung am besten mit einer mathematische Funktion erklären.

In der Mathematik ist eine Funktion oder Abbildung eine Relation zwischen zwei Mengen, die jedem Element der einen Menge genau einen Wert der anderen Menge über die entsprechende Abbildungsvorschrift vorschreibt, z.B. die allgemeine quadratische Funktion

$f(x) = ax^2+bx+c$

Nehmen wir als Beispiel für die Parameter die folgenden Werte a=2, b=4 und c=-8

$f(x) = 2x^2+4x-8$

so können wir eine Funktion mit einem Namen, im folgenden Beispiel den Namen f und entsprechenden Argumenten in einer nachfolgenden runden Klammer, im folgenden Beispiel dem Argument (x) in Python mit dem Schlüsselwort def definieren, wobei im anschliessenden eingerückten Block festgelegt wird, was berechnet und welcher Wert mit dem Schlüsselwort return zurückgegeben werden soll:

In [2]:
def f(x):
    return 2*x**2+4*x-8

Wir können anschliessend eine Liste mit einer Funktionstabelle erstellen, in denen die einzelnen Punkte allerdings nicht übereinander sondern nebeneinander in einer Zweier-Kombination (Tupel) aufgereiht sind, also statt der üblichen Tabelle

x -6 -5 -4 -3 -2 -1 0 1 2 3 4
y 40 22 8 -2 -8 -10 -8 -2 8 22 40

wird die Liste in der Form [(x1,y1),(x2,y2),....,(xn,yn)] ausgegeben:

In [3]:
tabelle = []
for x in range(-6,5):
    tabelle.append((x,f(x)))
print(tabelle)
[(-6, 40), (-5, 22), (-4, 8), (-3, -2), (-2, -8), (-1, -10), (0, -8), (1, -2), (2, 8), (3, 22), (4, 40)]

Grafische Darstellung mit Pygal

Mit einer solchen Funktionstabelle ist mit der Python Bibliothek pygal im Jupyter Notebook sehr schnell und einfach die grafische Darstellung dieser Funktion umsetzbar.

Die Bibliothek muss allerdings erst für unsere virtuelle Maschine zur Verfügung gestellt werden, dies geschieht in einem Terminalfenster bzw. unter Windows in einem Fenster von Anaconda Prompt mit dem Befehl

pip install pygal

Mit dem untenstehenden Code kann dann die entsprechende Funktionstabelle grafisch dargestellt werden. Bitte machen sie sich momentan keine Gedanken, wie dieser Code zu interpretieren ist und was hier passiert. Wir werden dies im Laufe der Veranstaltung besser verstehen lernen.

In [4]:
from pygal import XY
from IPython.display import SVG
xy = XY()
xy.add('y = 2x²+4x-8', tabelle)
SVG(xy.render())
Out[4]:
Pygal-10-10001010202030304040-6-6-5-5-4-4-3-3-2-2-1-10011223344-6: 4011.71538461538462710.384615384615358-5: 2270.2923076923077197.30769230769232-4: 8128.8692307692308342.6923076923077-3: -2187.44615384615386446.53846153846155-2: -8246.02307692307696508.84615384615387-1: -10304.6529.61538461538460: -8363.1769230769231508.846153846153871: -2421.7538461538462446.538461538461552: 8480.3307692307692342.69230769230773: 22538.9076923076923197.307692307692324: 40597.484615384615410.384615384615358y = 2x²+4x-8

Beispiel 1 aus dem Mathematik Modul

Aufgabe 5a aus der Übung 2 (Funktionen 1)

Nullstellen von Funktionen

Bestimmen Sie die Nullstellen der folgenden Funktionen und geben Sie eine sinnvolle Mengenschreibweise an.

a) $y=\frac{x^2-9}{x+1}$

In [5]:
def f2(x):
    return (x**2-9)/(x+1)

Infolge der Polstelle dieser Funktion an der Stelle x=-1 (eine Division durch Null ist nicht definiert) muss dieser x-Wert aus der Funktionstabelle herausgenommen und in die zwei Teile links (tabelle1, rot) und rechts (tabelle2, blau) dieser Polstelle (grün) aufgeteilt werden:

In [6]:
tabelle1 = []
tabelle2 = []
for x in range(-6,-1):
    tabelle1.append((x,f2(x)))
for x in range(0,5):
    tabelle2.append((x,f2(x)))
xy = XY()
xy.add('y = x²-9/(x+1)', tabelle1)
xy.add('y = x²-9/(x+1)', tabelle2)
xy.add('Polstelle', [(-1,-9),(-1,5)])
SVG(xy.render())
Out[6]:
Pygal-9-9-8-8-7-7-6-6-5-5-4-4-3-3-2-2-1-1001122334455-6-6-5-5-4-4-3-3-2-2-1-10011223344-6: -5.411.507692307692318396.09890109890114-5: -469.04615384615384344.1758241758242-4: -2.333333333126.58461538461538282.3626373626374-3: -0184.12307692307692195.82417582417582-2: 5241.6615384615384710.3846153846153580: -9356.73846153846154529.61538461538461: -4414.276923076923344.17582417582422: -1.666666667471.8153846153845257.63736263736263: 0529.3538461538461195.824175824175824: 1.4586.8923076923077143.90109890109886-1: -9299.2529.6153846153846-1: 5299.210.384615384615358y = x²-9/(x+1)y = x²-9/(x+1)Polstelle

Die Nullstellen sind also aus der Grafik deutlich sichtbar bei {-3,+3} zu erkennen.

Beispiel 2 aus dem Mathematik Modul

Aufgabe 6 aus der Übung 2 (Funktionen 1)

Graphische Darstellung von Funktionen

Bei einem schwingungsfähigen, mechanischen System werden folgende Auslenkungen in Abhängigkeit von der Zeit gemessen (siehe Tabelle). Skizzieren Sie den Funktionsverlauf in einem Diagramm mit geeignetem Maßstab.

t in [s] 0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9
y in [cm] 4 2,87 2,01 1,37 0,90 0,55 0,30 0,12 0 -0,08

Stellen wir diese Funkionstabelle jetzt wieder als Liste zusammen:

In [7]:
tabelle = [(0,4),(0.1,2.87),(0.2,2.01),(0.3,1.37),(0.4,0.9),(0.5,0.55),(0.6,0.3),(0.7,0.12),(0.8,0),(0.9,-0.08)]
xy = XY()
xy.add('Schwingung', tabelle)
SVG(xy.render())
Out[7]:
Pygal0011223344000.10.10.20.20.30.30.40.40.50.50.60.60.70.70.80.80.90.90: 412.19230769230769210.3846153846153580.1: 2.8779.92735042735043154.191176470588230.2: 2.01147.6623931623932263.636877828054370.3: 1.37215.39743589743588345.08484162895920.4: 0.9283.13247863247864404.898190045248840.5: 0.55350.86752136752136449.44004524886880.6: 0.3418.6025641025641481.25565610859730.7: 0.12486.3376068376068504.16289592760180.8: 0554.0726495726497519.43438914027150.9: -0.08621.8076923076924529.6153846153846Schwingung

Beispiel 5 aus dem Mathematik Modul

Aufgabe 7 aus der Übung 2 (Funktionen 1)

Geradengleichungen

Welche der Punkte liegen auf der Geraden

$y = 4x-5$

  • A (1;1)
  • B (2;4)
  • C (20;75)

Auch hier können wir neben der Geradengleichung auch die jeweiligen Punkte in unserem Graphen mit einzeichnen:

In [8]:
def f3(x):
    return 4*x-5
In [9]:
tabelle = []
for x in range(0,21):
    tabelle.append((x,f3(x)))
xy = XY()
xy.add('y=4x-5', tabelle)
xy.add('A(1;1)', [(1,1)])
xy.add('B(2;4)', [(2,4)])
xy.add('C(20;75)', [(20,75)])
SVG(xy.render())
Out[9]:
Pygal00101020203030404050506060707000224466881010121214141616181820200: -512.476923076923077529.61538461538461: -143.669230769230765503.653846153846132: 374.86153846153847477.69230769230773: 7106.05384615384615451.73076923076924: 11137.24615384615387425.76923076923085: 15168.43846153846155399.807692307692266: 19199.63076923076923373.84615384615387: 23230.82307692307694347.884615384615368: 27262.0153846153847321.92307692307699: 31293.20769230769235295.9615384615384510: 35324.40000000000003269.9999999999999411: 39355.5923076923077244.038461538461512: 43386.78461538461545218.0769230769230413: 47417.97692307692313192.1153846153845814: 51449.1692307692308166.1538461538460815: 55480.36153846153854140.1923076923076216: 59511.5538461538461114.2307692307691717: 63542.746153846153988.2692307692307218: 67573.938461538461562.30769230769226419: 71605.130769230769136.34615384615375420: 75636.32307692307710.3846153846153581: 143.669230769230765490.67307692307692: 474.86153846153847471.201923076923120: 75636.32307692307710.384615384615358y=4x-5A(1;1)B(2;4)C(20;75)

und wir sehen, dass von den drei Punkten A, B und C nur der (gelbe) Punkt C auf der Geraden liegt.

In [10]:
%%Mooc MultipleChoiceAssessment
Out[10]:

Funktionen

Es ist folgende Funktion gegeben:


def f(x):
    return 3*x**2+3*x

Diese Funktion wird im folgenden Code aufgerufen:


ergebnis = f(2)

Welcher Wert ist anschliessend in der Variablen ergebnis gespeichert?

12
14
16
18
20

In [11]:
%%Mooc StringAssessment
Out[11]:

Funktionen

Es sind die folgenden beiden Funktionen f3 und f4 gegeben:


def f3(x):
    return 4*x-5
def f4(x):
    return -3*x+23

Zeigen sie grafisch die Schnittstelle der beiden Funktionen auf

Wie lautet der Schnittpunkt der beiden Geraden?



In [12]:
%%Mooc Video
Out[12]:

Weitere Literatur

In [13]:
%%Mooc WebReference

Defining Functions

https://docs.python.org/3/tutorial/controlflow.html#defining-functions

Hinweis: Das in Funktionen einführende Kapitel des offiziellen Python Tutorials