3.3. Numpy Arrays#

Diese Aufgabe wiederholt einige grundlegende Konzepte der Arraymanipulation.

Aufgabenteil A#

Aufgabenstellung#

  1. Benutzen Sie np.sin um ein Array zu erstellen, das Sinuswerte, ausgewertet auf dem Intervall \([0,2\pi]\), enthällt.

  2. Plotten Sie die Funktion.

  3. Berechnen Sie mithilfe von Slices die Ableitung, indem Sie jeweils zwei aufeinander folgende Elemente voneinander subtrahieren und durch die von Ihnen gewählte Schrittweite teilen.

  4. Plotten Sie die Ableitung mit in den zuvor erstellten Plot.

Lösungshinweis#

Wenn Sie alles richtig gemacht haben, sollten Sie eine Sinus und eine Cosinus Kurve sehen.

Lösungsvorschlag#

Hide code cell content
import numpy as np
import matplotlib.pyplot as plt

# Berechnung von Sinus und dessen Ableitung
wertebereich = np.linspace(0, 2* np.pi, 1000)
sin = np.sin(wertebereich)
cos = (sin[1:]-sin[:-1]) * 1000/2/np.pi

# Plotten der Daten
plt.plot(wertebereich, sin, label='sin')
plt.plot(wertebereich[1:], cos, label='cosin')
plt.grid()
plt.xlabel('x')
plt.ylabel('f(x)')
plt.legend()

plt.show()
../../../../_images/2db15763addda20380e2373cff6785f8abd875b82476abcd539bc8ddf135aee0.png

Aufgabenteil B#

Aufgabenstellung#

In diesem Aufgabenteil sollen Sie ein bisschen mit boolschen Arrays spielen. Ziel ist es, ein Array zu finden, dass elementweise die Maximas zwischen den beiden zuvor erstellten Arrays enthällt.

  1. Sie werden wie bei Aufgabenteil A vermutlich auch, auf das Problem stoßen, dass das Sinusarray ein Element mehr als das Cosinusarray enthällt. Ignorieren Sie einfach das erste oder letzte Element. Dies ist mathematisch nicht ganz korrekt, aber für unsere Näherung hier ausreichend.

  2. Erstellen Sie ein boolsches Array, das True ist, wenn der Cosinuswert kleiner als der korrespondierende Sinuswert ist und sonst False.

  3. Benutzen Sie das boolsche Array, um ein Array zu erstellen, bei dem jedes Element das Maximum der beiden korrespondierenden Elemente der anderen Arrays enthällt.

  4. Plotten Sie das Maximumsarray.

Lösungshinweis#

Ihr Plot könnte wie folgt aussehen:

../../../../_images/8ac7e5057cb77be24d7fb7196206d29dbc15de288b3d89dfbeb69e6fdc565973.png

Lösungsvorschlag#

Hide code cell content
# Erstellen der binaeren Maske
maske = cos - sin[1:] < 0

# Erstellen des Maximumsarrays
mix = cos
mix[maske] = sin[1:][maske]

# Plotten der Daten
plt.figure()
plt.plot(wertebereich[1:], mix, label='max(sin, cos)')
plt.grid()
plt.xlabel('x')
plt.ylabel('f(x)')
plt.legend()

plt.show()
../../../../_images/8ac7e5057cb77be24d7fb7196206d29dbc15de288b3d89dfbeb69e6fdc565973.png