Lineare Algebra I - Übungen

%pylab inline
%config InlineBackend.figure_format = 'svg'

import sympy as sp
import numpy_financial as npf  # https://numpy.org/numpy-financial/
%pylab is deprecated, use %matplotlib inline and import the required libraries.
Populating the interactive namespace from numpy and matplotlib

Aufgaben

Aufgabe LA1-1: lineare (Un-)Abhängigkeit

Sei \(v_1 = \begin{pmatrix}1 \\ 2 \\ 3 \end{pmatrix}, v_2 = \begin{pmatrix} 4 \\ 5 \\ 6 \end{pmatrix}\) und \(v_3 = \begin{pmatrix} 2 \\ 1 \\ 0 \end{pmatrix}\).

  1. Bestimmen Sie, ob die Vektoren \(v_i\) linear (un)abhängig sind.

  2. Falls möglich finden Sie eine Linearkombination \(\alpha_1, \alpha_2, \alpha_3\) nicht Null, so dass \(\alpha_1 v_1 + \alpha_2 v_2 + \alpha_3 v_3 = 0\).

Aufgabe LA1-2: Konturlinien

Betrachten Sie die lineare Funktion \(f:\mathbb{R}^2 \rightarrow \mathbb{R}: f(x) = 2x_1 - x_2\).

  1. Zeichnen Sie von Hand und mit Python die Konturlinien \(f(x) = c\) in \(\mathbb{R}^2\) für die Funktionswerte \(c = -2, 0, 2, 4\).

  2. Wie müssen Sie die Koeffizienten von \(f\) ändern, so dass die Konturlinien für die Funktionswerte -2, 0, 2, 4 näher zueinander bzw. weiter voneinander sind?

Aufgabe LA1-3: Prozessortemperatur

Wir nehmen an, daß die Temperatur \(T\) (gemessen über Raumtemperatur, beispielsweise \(T = 30\) Grad Celsius bedeutet 30 Grad Celsius über der Raumtemperatur) eines Computers mit zwei verschiedenen Prozessoren eine lineare Funktion der Leistungen \(p = (p_1, p_2)\) der zwei Prozessoren ist. Wenn beide Prozessoren im Leerlauf sind ist \(p = (2,2)\), was zu einer Temperatur \(T = 30\) Grad Celsius führt. Wenn der erste Prozessor mit voller Leistung arbeitet und die andere im Leerlauf ist, ist \(p = (8,2)\) und die Temperatur steigt auf \(T = 60\) Grad Celsius.

  1. Bestimmen Sie die Funktionsgleichung für \(T(p)\).

  2. Zeichnen Sie die Konturlinien von \(T(p)\) von Hand und mit Python.

  3. Angenommen beide Prozessoren laufen mit gleicher Leistung. Wie groß kann diese sein, wenn wir verlangen, dass die Temperatur unter 90 Grad Celsius sein muss?

Aufgabe LA1-4: Cash Flows

Betrachten Sie den Zeitvektor \(t = (0, 1, 2, ..., 10)^T \in \mathbb{R}^{11}\), der die Zeitschritte 0 (jetzt), 1 (1 Jahr in der Zukunft), 2 (2 Jahre in der Zukunft) usw. umfasst. Ein Cashflow zu \(t\) ist ein Vektor \(c = (c_0, c_1, c_2, ..., c_{10})^T \in \mathbb{R}^{11}\) der selben Dimension. In dieser aber auch vielen anderen Anwendungen ist es günstig, die Vektorindizes mit 0 zu beginnen.

Der cash flow \(c = (-18, 1, 1, ..., 1, 21)^T \in \mathbb{R}^{11}\) bildet ab, dass 18 monetäre Einheiten (ME) jetzt investiert werden. Zu den Zeitschritten 1 bis 9 wird eine ME erhalten, und zum Zeitschritt 10 werden 21 ME erhalten. Er beschreibt somit einen cash flow eines verzinsten Wertpapiers mit einem heutigen Preis von 18 ME, das jedes Jahr 1 ME Anleihenzins erwirtschaftet und in 10 Jahren einen nominalen Wert von 21 ME hat.

Cash flows werden üblicherweise in einen Stamm-Blatt-Diagramm (engl. stem plot) dargestellt. Das Stamm-Blatt-Diagramm von \(c\) kann mit folgendem Python-Code visualisiert werden.

t = arange(0, 11)
c = array([-18, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21])
stem(t, c)
xlim(-1, 11)
xlabel('Jahr')
ylabel('ME')
grid()

Aufgaben:

  1. Wie ist der Kapitalwert eines Cash-flows definiert?

  2. Berechnen Sie den Kapitalwert des oben gegebenen Cashflows \(c = (-18, 1, 1, ..., 1, 21)^T\) für:

    • einen 5 % Jahreszinssatz.

    • einen 10 % Jahreszinssatz.

  3. Formulieren Sie die Funktion \(f(c)\), die den Kapitalwert für einen Cashflow \(c\) liefert!

  4. Ist der Kapitalwert der Summe zweier Cash-flows die Summe der Kapitalwerte der beiden Cash-flows? Begründen Sie Ihre Antwort!

  5. Erzeugen Sie ein Stamm-Blatt-Diagramm für die Koeffizienten der Kapitalwert-Funktion \(f(c)\) für

    • einen 5 % Jahreszinssatz.

    • einen 10 % Jahreszinssatz.

Lösungen

Lösung LA1-1: lineare (Un-)Abhängigkeit

Die Vektoren \(v_i\) sind linear unabhängig, falls das lineare Gleichungssystem \(\alpha_1 v_1 + \alpha_2 v_2 + \alpha_3 v_3 = 0\) für die Koeffizienten \(\alpha_i \in \mathbb{R}\) nur die triviale Lösung \(\alpha_i = 0\) hat.

In komponenten ausgeschrieben lautet die Vektorgleichung \(\alpha_1 v_1 + \alpha_2 v_2 + \alpha_3 v_3 = 0\)

\[\begin{split} \alpha_1 \begin{pmatrix} 1 \\ 2 \\ 3 \end{pmatrix} + \alpha_2 \begin{pmatrix} 4 \\ 5 \\ 6 \end{pmatrix} + \alpha_3 \begin{pmatrix} 2 \\ 1 \\ 0 \end{pmatrix} = \begin{pmatrix} 0 \\ 0 \\ 0 \end{pmatrix}. \end{split}\]

In Gleichungsform:

\[\begin{split}\begin{align} \alpha_1 + 4 \alpha_2 + 2 \alpha_3 & = 0 \\ 2 \alpha_1 + 5 \alpha_2 + \alpha_3 & = 0 \\ 3 \alpha_1 + 6 \alpha_2 & = 0 \end{align}\end{split}\]

In Matrixform:

\[\begin{split}\begin{pmatrix} 1 & 4 & 2 \\ 2 & 5 & 1 \\ 3 & 6 & 0 \end{pmatrix} \begin{pmatrix} \alpha_1 \\ \alpha_2 \\ \alpha_3 \end{pmatrix} = \begin{pmatrix} 0 \\ 0 \\ 0 \end{pmatrix}\end{split}\]

Das lineare Gleichungssystem läßt sich z. B. mit dem Gaußschen Eliminationsverfahren lösen. Der Lösungsraum ist eindimensional und kann z. B. mit \(\alpha_3\) parametrisiert werden:

\[\begin{split}\begin{align} \alpha_1 & = 2 \alpha_3 \\ \alpha_2 & = - \alpha_3 \\ \alpha_3 & = \text{frei wählbar} \end{align}\end{split}\]

Das lineare Gleichungssystem \(\alpha_1 v_1 + \alpha_2 v_2 + \alpha_3 v_3 = 0\) hat daher auch nicht-triviale Lösungen, z.B. mit \(\alpha_3 = -1\) gilt \(-2 v_1 + v_2 - v_3 = 0\). Daher sind die Vektoren linear abhängig.

# The command solve() can solve quadratic matrix equations Ax=b 
# only when Ax=b has a unique solution. This is the case 
# if and only if (short iff) the columns of A are linearly independent.
A = array([[1, 4, 2],
           [2, 5, 1],
           [3, 6, 0]])
b = zeros((3,1))
# solve(A, b) # gives the error " ... LinAlgError: Singular matrix" - try it!
# With the sympy package one can solve matrix equations Ax=b symbolically.
sp.init_printing() # initializes pretty-printing
a1, a2, a3 = sp.symbols('a1 a2 a3')
sp.linsolve([  a1 + 4*a2 + 2*a3, 
             2*a1 + 5*a2 +   a3,
             3*a1 + 6*a2     ], 
            (a1, a2, a3))
_images/02_lineare_algebra_1_ue_10_0.png
sp.init_printing(False) # stops pretty_print

Lösung LA1-2: Konturlinien

  1. Die Kontourlinien sind gegeben durch die Geradengleichungen \(2x_1 - x_2 = c\). Siehe Code.

  2. Damit die Konturlinien für die Funktionswerte näher zueinander liegen, muss der Koeffizientenvektor \(\begin{pmatrix} 2 \\ -1 \end{pmatrix}\) mit einer Zahl größer 1 multipliziert werden. Damit die Konturlinien für die Funktionswerte weiter voneinander liegen, muss der Koeffizientenvektor mit einer positiven Zahl kleiner 1 multipliziert werden.

# x1-x2-Grid:
delta = 0.25
x1 = arange(-5.0, 5.0, delta)
x2 = arange(-5.0, 5.0, delta)
X1, X2 = meshgrid(x1, x2)

# Koeffizientenvektor:
c = array([2, -1])
# c = array([2, -1])*3 # Skalieren von c damit die Konturlinien näher zueinander liegen
# c = array([2, -1])*0.2 # Skalieren von c damit die Konturlinien weiter voneinander liegen

# y = f(x) = c^T x:
Y = c[0]*X1 + c[1]*X2

# Plot:
figure(figsize=(4,4))
axis('equal')
arrow(0, 0, c[0], c[1], head_width=0.2, fc='k')
CS = contour(X1, X2, Y, levels= [-2,0,2,4], cmap='coolwarm')
clabel(CS, inline=1, fmt='%1.1f')
xlabel('$x_1$')
ylabel('$x_2$')
grid(True)
_images/02_lineare_algebra_1_ue_13_0.svg

Lösung LA1-3: Prozessortemperatur

  1. Die Temperatur wird als eine lineare Funktion der Leistungen \(p = (p_1, p_2)\) modelliert: \(T(p) = c_1 p_1 + c_1 p_2\). Einsetzen der zwei Messdaten in die Funktionsgleichung liefert:

    \[\begin{split}\begin{align} c_1 2 + c_2 2 & = 30 \\ c_1 8 + c_2 2 & = 60 \end{align}\end{split}\]

    Das lineare Gleichungssystem ist eindeutig lösbar: \(c = \begin{pmatrix} 5 \\ 10 \end{pmatrix}\), siehe auch Code. Somit lautet die Funktionsgleichung \(T(p) = 5p_1 + 10p_2\).

  2. Siehe Code.

  3. Bei gleicher Leistung \(p\) beider Prozessoren gilt \(p_1 = p_2 =p\). Die Forderung, dass die Temperatur unter 90 Grad Celsius sei, bedeutet \(5p + 10p < 90\) und hat die Lösung \(p<6\). Somit kann die gleiche Leistung beider Prozessoren maximal 6 sein, damit die Temperatur unter 90 Grad Celsius ist.

# Solving the quadratic system of linear equations in matrix form with the command solve():
A = array([[2, 2],
           [8, 2]])
b = array([[30],
           [60]])
c = solve(A, b)
print(c)
[[ 5.]
 [10.]]
# contour lines of T(p) = 5p_1 + 10p_2:

delta = 1
p1 = arange(0, 12, delta)
p2 = arange(0, 12, delta)
P1, P2 = meshgrid(p1, p2)

T = c[0,0]*P1 + c[1,0]*P2

figure(figsize=(4,4))
axis('equal')
arrow(0, 0, c[0,0], c[1,0], head_width=0.2, fc='k')
CS = contour(P1, P2, T, levels= arange(0, 200, 10), cmap= 'coolwarm')  # colormaps()
clabel(CS, inline=1, fmt='%1.1f')
xlabel('$p_1$')
ylabel('$p_2$')
grid(True)
_images/02_lineare_algebra_1_ue_16_0.svg

Lösung LA1-4: Cash Flows

  1. Siehe z. B. Kapitalwert und die englische Version net present value.

  2. Siehe Code.

  3. \(f(c) = \sum_{t=0}^{11} \dfrac{c_t}{(1 + i)^t}\)

  4. Ja, denn die Funktion \(f(c)\) ist linear. Denn und daher lässt sie sich als inneres Produkt scheiben: \(f(c) = d^T = \sum_{t=0}^{11} d_t c_t\). Die Diskontierungsfaktoren \(d_t = \dfrac{1}{(1 + i)^t}\) sind die Koeffizienten der Kapitalwert-Funktion \(f(c)\).

  5. Siehe Code.

# cash flow:
t = arange(0, 11)
c = array( [-18, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21])

# stem-plot of cash flow
figure(figsize=(5,3))
stem(t, c, use_line_collection=True)
xlim(-1, 11)
xlabel('Jahr')
ylabel('cash flow (ME)') # ME ... monetäre Einheit, z. B. € oder $
grid(True)
_images/02_lineare_algebra_1_ue_18_0.svg
i = 0.05      # Zinssatz
q = 1 + i     # Aufzinsungsfaktor
d = q**(-t)   # Abzinsungsvektor, Diskontierungsvektor
K = dot(d, c) # Kapitalwert
print("Für i = {:.2f} ist der Kapitalwert = {:.2f} ME".format(i, K))

i = 0.10     # Zinssatz
q = 1 + i    # Aufzinsungsfaktor
d = q**(-t)  # Abzinsungsvektor, Diskontierungsvektor
K = dot(d, c)
print("Für i = {:.2f} ist der Kapitalwert = {:.2f} ME".format(i, K))
Für i = 0.05 ist der Kapitalwert = 2.00 ME
Für i = 0.10 ist der Kapitalwert = -4.14 ME
# Mit hilfe der NumPy-Funktion `npv` aus https://numpy.org/numpy-financial/

i = 0.05     # Zinssatz
q = 1 + i    # Aufzinsungsfaktor
d = q**(-t)  # Abzinsungsvektor
K = dot(d,c) # Kapitalwert

print("Für i = {:.2f} ist der Kapitalwert = {:.2f} ME".format(i, K))
print("Für i = {:.2f} ist der Kapitalwert = {:.2f} ME".format(i, npf.npv(i, c)))
Für i = 0.05 ist der Kapitalwert = 2.00 ME
Für i = 0.05 ist der Kapitalwert = 2.00 ME
figure(figsize=(5,3))

q = 1.05     # Aufzinsungsfaktor
d = q**(-t)  # Abzinsungsvektor, Diskontierungsvektor
stem(t, d, markerfmt='bo', linefmt='b--',
     label='i = 5 %', use_line_collection=True)

q = 1.10     # Aufzinsungsfaktor
d = q**(-t)  # Abzinsungsvektor, Diskontierungsvektor
stem(t, d, markerfmt='ro', linefmt='r--',
     label='i = 10 %', use_line_collection=True)

legend()
xlim(-1, 11)
ylim(0,1.1)
xlabel('Jahr')
ylabel('Diskontierungsvektor')
grid(True)
_images/02_lineare_algebra_1_ue_21_0.svg

Weiterführendes Thema: interner Zinssatz

# interner Zinssatz:

I = linspace(0, 0.10, 100)
K = array([npf.npv(i, c) for i in I])

# Nullstelle ist der interne Zinssatz:
figure(figsize=(5,3))
plot(I, K)
xlabel('Zinssatz')
ylabel('Kapitalwert')
grid(True)
show()
_images/02_lineare_algebra_1_ue_23_0.svg

Kurztestfragen

  1. Sind die zwei Vektoren \(\begin{pmatrix} 3\\ -4 \end{pmatrix}, \begin{pmatrix} -4\\ 3 \end{pmatrix}\) linear abhängig oder linear unabhänging? Begründen Sie Ihre Antwort.

  2. Welchen Winkel schließen die Vektoren \((1,0,-1,0,3)\) und \((1,0,1,0,0)\) ein?

  3. Skizieren Sie die Konturlinien der Funktion \(f(x) = -2x_1 + 5x_2\).

  4. Sind die drei Vektoren \(\begin{pmatrix} 1\\ -2 \end{pmatrix}, \begin{pmatrix} 0\\ 3 \end{pmatrix}\) und \(\begin{pmatrix} 1\\ 0 \end{pmatrix}\) linear abhängig oder linear unabhänging? Begründen Sie Ihre Antwort.

  5. Warum sind die Vektoren \((2,-3,-1,0,5)\) und \((1,-2,3,1,-1)\) orthogonal (=rechtwinklig)?

  6. Skizzieren Sie den Lösungsraum der Ungleichung \(2x_1 - 3x_2 \geq 6\).

  7. Sind die zwei Vektoren \(\begin{pmatrix} 3\\ -4 \end{pmatrix}, \begin{pmatrix} 4\\ 3 \end{pmatrix}\) linear abhängig oder linear unabhänging? Begründen Sie Ihre Antwort.

  8. Geben Sie ein Beispiel für eine lineare Funktion \(f:\mathbb{R}^4 \rightarrow \mathbb{R}\) an.

  9. Skizzieren Sie den Lösungsraum der Ungleichung \(-x_1 + 2x_2 \geq 4\).

  10. Zeigen Sie rechnerisch, ob zwischen den beiden Vektoren \(\left(\begin{array}{c} 2 \\ -4 \\ 12 \\ \end{array}\right)\) und \(\left(\begin{array}{c} -0,5 \\ 1 \\ -3 \\ \end{array}\right)\) eine lineare Abhängigkeit vorliegt oder nicht.

  11. Berechnen Sie das innere Produkt der beiden Vektoren \(\left(\begin{array}{c} 1 \\ 0 \\ -2 \\ 2,5 \\ -3 \\ \end{array}\right)\) und \(\left(\begin{array}{c} -4 \\ 2,5 \\ -1 \\ 2 \\ 1 \\ \end{array}\right)\). Wie groß ist der Winkel zwischen den beiden Vektoren?

  12. Skizzieren Sie die Konturlinien der linearen Funktion, die durch den Koeffizientenvektor \(c=\left(\begin{array}{c} 2 \\ -4 \\ \end{array}\right)\) in der Form \(f(x)=c^T x\) gegeben ist.

  13. Was geschieht mit den Konturlinien konstanter Funktionswerte einer linearen Funktion, wenn der Koeffizientenvektor dieser linearen Funktion mit einer Zahl größer als 1 multipliziert wird?

  14. Ein Unternehmen hat für die Anschaffung seiner Produktionsanlagen Fixkosten von 300000 € zu tragen. Die Produktionskosten für Produkt A betragen 7 €/Stück, für Produkt B 10 €/Stück. Das Unternehmen kann Produkt A für 32 €/Stück und Produkt B für 50 €/Stück verkaufen. Formulieren Sie die Gewinnfunktion des Unternehmens in Abhängigkeit der verkauften Stückzahlen der Produkte A und B. Welche Menge an Produkt A muss das Unternehmen noch verkaufen, um Gewinn zu erzielen, wenn vom Produkt B bereits 5000 Stück abgesetzt wurden?

Programmierprojekte