Files
HM1-Serie-Python/Kuengjoe_S12/Kuengjoe_S12_Aufg4.py
2026-01-03 15:28:37 +01:00

49 lines
1.4 KiB
Python

import numpy as np
def Kuengjoe_S12_Aufg4(in_matrix: np.ndarray, iteration: int):
current_iteration = np.array(in_matrix, dtype=float)
dimension = current_iteration.shape[0]
acc_orthogonal_matrix = np.eye(dimension, dtype=float)
for iteration in range(iteration):
q_matrix, r_matrix = np.linalg.qr(current_iteration)
current_iteration = r_matrix @ q_matrix
acc_orthogonal_matrix = acc_orthogonal_matrix @ q_matrix
return current_iteration, acc_orthogonal_matrix
if __name__ == "__main__":
#4a)
test_matrix = np.array([
[1, -2, 0],
[2, 0, 1],
[0, -2, 1]
], dtype=float)
ak_1, pk_1 = Kuengjoe_S12_Aufg4(test_matrix, 1)
print("A1 =\n", np.round(ak_1, 6))
print("P1 =\n", np.round(pk_1, 6))
#4b)
symmetric_matrix = np.array([
[6, 1, 2, 1, 2],
[1, 5, 0, 2, -1],
[2, 0, 5, -1, 0],
[1, 2, -1, 6, 1],
[2, -1, 0, 1, 7]
], dtype=float)
ak_100, pk_100 = Kuengjoe_S12_Aufg4(symmetric_matrix, 100)
orthogonality_residual = np.linalg.norm(pk_100.T @ pk_100 - np.eye(5))
print("||P^T P - I|| =", orthogonality_residual)
approx_eigenvalues_from_qr = np.diag(ak_100)
print("Eigenvalues approx (diag(Ak)) =", approx_eigenvalues_from_qr)
#4c)
eigenvalues_numpy, eigenvectors_numpy = np.linalg.eig(symmetric_matrix)
print(eigenvalues_numpy)