Compare commits

...
4 Commits
Author SHA1 Message Date
leobr 312519e4d1 Merge remote-tracking branch 'origin/master' 2022-11-24 22:16:00 +01:00
leobr a3ff088c2d added aufg 3 2022-11-24 22:15:51 +01:00
schrom01 7553984635 made Calculation for Task 3c 2022-11-24 22:12:54 +01:00
schrom01 60db5aa861 Solved Task 2c+d 2022-11-19 01:41:07 +01:00
4 changed files with 108 additions and 5 deletions
Binary file not shown.
+29 -5
View File
@@ -15,10 +15,10 @@ Example: A = np.array([[1,2,-1],[4,-2,6],[3,1,0]])
@author: knaa @author: knaa
""" """
import numpy as np import numpy as np
import timeit
# Aufgabe 2a
def Serie8_Aufg2(A): def Serie8_Aufg2(A):
unknown = 0
A = np.copy(A) #necessary to prevent changes in the original matrix A_in A = np.copy(A) #necessary to prevent changes in the original matrix A_in
A = A.astype('float64') #change to float A = A.astype('float64') #change to float
@@ -55,7 +55,7 @@ def Serie8_Aufg2(A):
if __name__ == '__main__': if __name__ == '__main__':
# Beispiel # Beispiel aus Skript
# A = np.array([[1, 2, -1], [4, -2, 6], [3, 1, 0]]) # A = np.array([[1, 2, -1], [4, -2, 6], [3, 1, 0]])
# b = np.array([ # b = np.array([
# [9], # [9],
@@ -63,7 +63,7 @@ if __name__ == '__main__':
# [9] # [9]
# ]) # ])
# Example from Task 1 # Beispiel aus Aufgabe 1
A = np.array([ A = np.array([
[1, -2, 3], [1, -2, 3],
[-5, 4, 1], [-5, 4, 1],
@@ -77,6 +77,7 @@ if __name__ == '__main__':
[Q,R]=Serie8_Aufg2(A) [Q,R]=Serie8_Aufg2(A)
# Aufgabe 2b
n = len(b) - 1 n = len(b) - 1
QTb = Q.T @ b QTb = Q.T @ b
result = [0 for i in range(n+1)] result = [0 for i in range(n+1)]
@@ -93,4 +94,27 @@ if __name__ == '__main__':
print("\nQ:\n", Q) print("\nQ:\n", Q)
print("\nR:\n", R) print("\nR:\n", R)
print("\Result:\n", result) print("\Result:\n", result)
# Aufgabe 2c
t1 = timeit.repeat("Serie8_Aufg2(A)", "from __main__ import Serie8_Aufg2, A", number=100)
t2 = timeit.repeat("np.linalg.qr(A)", "from __main__ import np, A", number=100)
avg_t1 = np.average(t1) / 100
avg_t2 = np.average(t2) / 100
print("Geschwindigkeit mit 3x3 Matrix:")
print("Benötigte Zeit mit eigener Funktion:", avg_t1)
print("Benötigte Zeit mit Numpy:", avg_t2)
# Aufgabe 2d
Test = np.random.rand(100,100)
t1 = timeit.repeat("Serie8_Aufg2(Test)", "from __main__ import Serie8_Aufg2, Test", number=100)
t2 = timeit.repeat("np.linalg.qr(Test)", "from __main__ import np, Test", number=100)
avg_t1 = np.average(t1) / 100
avg_t2 = np.average(t2) / 100
print("Geschwindigkeit mit 100x100 Matrix:")
print("Benötigte Zeit mit eigener Funktion:", avg_t1)
print("Benötigte Zeit mit Numpy:", avg_t2)
# Die von Numpy zur Verfügung gestellt Funktion ist wesentlich effizienter.
+79
View File
@@ -0,0 +1,79 @@
import numpy as np
def switchRows(matrix, row1, row2):
matrix[[row1, row2]] = matrix[[row2, row1]]
return matrix
def Schenk_Brandenberger_S6_Aufg2(A, b):
def calculateRow(A, b, row, column):
b[row] = [b[row][0] - (A[row][column] / A[column][column]) * b[column][0]]
A[row] = [(A[row][i] - (A[row][column] / A[column][column]) * A[column][i]) for i in range(len(A[row]))]
return A, b
# Erstelle obere Dreiecksmatrix
countRowSwitch = 0
columnsToEdit = []
for row in range(1, len(A)):
columnsToEdit.append(row - 1)
for column in columnsToEdit:
if(A[row-1][column] == 0 and (row - 1 == column)):
rowToSwitch = row
if(row == 1):
while(A[rowToSwitch][column] == 0):
if(len(A) > rowToSwitch + 1):
rowToSwitch += 1
else:
return "Matrix ist nicht regulär!"
A = switchRows(A, row - 1, rowToSwitch)
b = switchRows(b, row - 1, rowToSwitch)
countRowSwitch += 1
else:
A, b = calculateRow(A, b, row, column)
#print("\nObere Dreiecksmatrix A:\n", A, "\nb:\n", b)
# Rückwärtseinsetzen
columnsToEdit = []
for row in range((len(A) - 2), -1, -1):
columnsToEdit.append(row + 1)
for column in columnsToEdit:
A, b = calculateRow(A, b, row, column)
row -= 1
#print("\nA:\n", A, "\nb:\n", b)
det = 1
result = []
for i in range(len(A)):
result.append(b[i][0] / A[i][i])
det *= A[i][i]
if(countRowSwitch % 2 == 1):
det *= (-1)
return result, det
if __name__ == '__main__':
# Zahlen von Serie 7 Aufgabe 1c
# A = np.array([[20000.0, 30000.0, 10000.0],
# [10000.0, 17000.0, 6000.0],
# [2000.0, 3000.0, 2000.0]])
#
# b = np.array([[5720000.0],
# [3300000.0],
# [836000.0]])
# Aufgabe 3c
A = np.array([[20000.0 - 100.0, 30000.0 - 100.0, 10000.0 - 100.0],
[10000.0 - 100.0, 17000.0 - 100.0, 6000.0 - 100.0],
[2000.0 - 100.0, 3000.0 - 100.0, 2000.0 - 100.0]])
b = np.array([[5720000.0 + 100000.0],
[3300000.0 + 100000.0],
[836000.0 + 100000.0]])
result, det = Schenk_Brandenberger_S6_Aufg2(A, b)
print("Ergebnis:")
for i in range(len(result)):
print("x" + str(i) + ": " + str(result[i]))
print("Determinante: " + str(det))
Binary file not shown.