Kontrollstrukturen#

Die wichtigsten Typen von Kontrollstrukturen sind:

  • if else Abfrage

  • for Schleife

  • while Schleife

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

if else Abfrage#

Beispiel: Determinante und inverse Matrix

Falls eine Matrix eine Determinante nicht Null hat, ist sie invertierbar.

A = np.array([[1, 2],
              [3, 4]])
print(A)
[[1 2]
 [3 4]]
if np.linalg.det(A) != 0:
    B = 1/np.linalg.det(A)*np.array([ [ A[1,1], -A[0,1] ],
                                      [-A[1,0],  A[0,0] ] ])
    print(B)
    print(np.linalg.inv(A))
else:
    print("Matrix ist nicht invertierbar.")
[[-2.   1. ]
 [ 1.5 -0.5]]
[[-2.   1. ]
 [ 1.5 -0.5]]
# Probe:
np.dot(A, B) # oder A@B 
array([[1., 0.],
       [0., 1.]])

for Schleife#

Beispiel: Arrhenius-Gleichung

Die Arrhenius-Gleichung, benannt nach Svante Arrhenius, beschreibt näherungsweise eine quantitative Temperaturabhängigkeit bei physikalischen und vor allem chemischen Prozessen, bei denen auf molekularer Ebene eine Aktivierungsenergie überwunden werden muss. Die Arrhenius-Gleichung ist eine phänomenologische Beziehung und gilt für sehr viele chemische Reaktionen. Unter anderem wird auch das Alterungsverhalten von Lithium-Ionen-Akkumulatoren damit beschreibbar.

Die Arrhenius-Gleichung beschreibt in der chemischen Kinetik für den Spezialfall monomolekularer Reaktionen die quantitative Abhängigkeit der Reaktionsgeschwindigkeitskonstanten \(k\) von der Temperatur: $\(k = A e^{\frac{-E_A}{RT}}\)$ mit

  • \(A\) … präexponentieller oder Frequenzfaktor

  • \(E_A\)Aktivierungsenergie (Einheit: J mol\(^{-1}\))

  • \(R\) … universelle Gaskonstante (8,314 J K\(^{-1}\) mol\(^{-1}\))

  • \(T\) … absolute (thermodynamische) Temperatur (Einheit: K)

Quelle: https://de.wikipedia.org/wiki/Arrhenius-Gleichung

A = 1
EA_values = np.arange(10, 200, 50)
R = 8.314
T = np.linspace(1, 500, num = 100)
plt.figure(figsize=(6,4))

for EA in EA_values:
    k = A*np.exp(-EA/(R*T))
    plt.plot(T, k, label="EA = {:d} J/mol".format(EA), linewidth=2)
plt.legend(loc='best')
plt.xlabel('T')
plt.ylabel('k')
plt.grid(True)
_images/Kontrollstrukturen_10_0.png

while Schleife#

Beispiel: Collatz-Problem

Das Collatz-Problem, auch als (3n+1)-Vermutung bezeichnet, ist ein ungelöstes mathematisches Problem, das 1937 von Lothar Collatz gestellt wurde. Bei dem Problem geht es um Zahlenfolgen, die nach einem einfachen Bildungsgesetz konstruiert werden:

  • Beginne mit irgendeiner natürlichen Zahl \(n>0\).

  • Ist \(n\) gerade, so nimm als Nächstes \(n/2\),

  • Ist \(n\) ungerade, so nimm als Nächstes \(3n+1\).

  • Wiederhole die Vorgehensweise mit der erhaltenen Zahl.

So erhält man zum Beispiel für die Startzahl \(n=19\) die Folge 19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, … Anscheinend mündet jede Folge mit \(n>0\) in den Zyklus 4, 2, 1, unabhängig davon, welche Startzahl \(n\) man probiert hat. Die Collatz-Vermutung lautet: Jede so konstruierte Zahlenfolge mündet in den Zyklus 4, 2, 1, egal, mit welcher natürlichen Zahl \(n>0\) man beginnt.

Trotz zahlreicher Anstrengungen gehört diese Vermutung noch immer zu den ungelösten Problemen der Mathematik. Mehrfach wurden Preise für eine Lösung ausgelobt.

Quelle: https://de.wikipedia.org/wiki/Collatz-Problem

n = 70
while True:
    if n % 2 == 0:     # Der Modulo Operator % liefert den Rest der Division.
        n = n/2
    else:
        n = 3 * n + 1
    print(n)
    if n == 1:
        break
35.0
106.0
53.0
160.0
80.0
40.0
20.0
10.0
5.0
16.0
8.0
4.0
2.0
1.0