import math
import numpy as np

print("VEKTORAUFGABEN (Aufgabe 8, S. 116)")
print("==================================")
print()
print("Gegeben sind die Vektoren")
print()
print("     [[2]      [[3]")
print(" v =  [5], w =  [-1]")
print("      [6]]      [2]]")
print()
v = np.array([[2], [5], [6]])
w = np.array([[3], [-1], [2]])
print(f"v + w =\n{v + w}")
print()
print(f"-2 * v =\n{-2 * v}")
print()
print(f"(1/2) * w =\n{(1/2.0) * w}")
print()
print("Hinweis: Die folgenden Operationen werden in NumPy überwiegend mit Zeilen- statt Spaltenvektoren gerechnet")
print()
v = np.array([2, 5, 6])
w = np.array([3, -1, 2])
sp = np.dot(v, w)
print(f"Skalarprodukt von v und w: {sp}")
print(f"Winkel zwischen v und w: {math.degrees(math.acos(sp / (np.linalg.norm(v) * np.linalg.norm(w))))}°")
print()
cp = np.cross(v, w)
print(f"Kreuzprodukt von v und w: {cp}")
print(f"Flächeninhalt des Parallelogramms zwischen v und w (Betrag des Kreuzprodukts): {np.linalg.norm(cp)}")
print()
print("MATRIXAUFGABEN (Aufgabe 9, S. 116 f.)")
print("=====================================")
print()
print("Gegeben sind die Matrizen")
print()
print(" A = [[4 3 -2]   B = [[2 5]")
print("      [1 2 -3]]       [1 -3]]")
print()
a = np.array([[4, 3, -2], [1, 2, -3]])
b = np.array([[2, 5], [1, -3]])
print("Transposition von A und B:")
print(a.transpose())
print(b.transpose())
print()
print("(-1 / 3) * A =")
print((-1 / 3) * a)
print()
print("3 * B =")
print(3 * b)
print()
print("Matrixmultiplikation (Falk-Schema) B * A:")
print(np.dot(b, a))
print()
print("Matrixmultiplikation (Falk-Schema) A[T] * B:")
print(np.dot(a.transpose(), b))
print()
print(f"Determinante von B: {np.linalg.det(b)}")
print()
print("Inverse Matrix von B:")
print(np.linalg.inv(b))
print()
print("Lösung von Gleichungssystemen mithilfe der inversen Matrix:")
print("2x + 5y = 7, x - 3y = -2")
print(np.linalg.solve(b, np.array([7, -2])))
print("2x + 5y = 6, x - 3y = 14")
print(np.linalg.solve(b, np.array([6, 14])))
