From c3baa36fb71c3a13f5cc7ad76287f9e2295b323d Mon Sep 17 00:00:00 2001 From: Dimitri Tayo Fongang Wembe <dimitri.wembe.tayo@fau.de> Date: Tue, 16 May 2023 16:07:54 +0200 Subject: [PATCH] fix mistake in formula of Q in QR-split --- qr.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/qr.py b/qr.py index ebe08b6..cdb0698 100644 --- a/qr.py +++ b/qr.py @@ -16,8 +16,12 @@ def givens_rotation(A, i, j): np.ndarray: Rotation Matrix ``J`` as above. """ # TODO - c = abs(A[j][j]) / ((A[i][j] ** 2 + A[j][j] ** 2) ** 0.5) - s = abs(A[i][j]) / ((A[i][j] ** 2 + A[j][j] ** 2) ** 0.5) + if abs(A[j][j]) == 0.0: + p = ((A[i][j] ** 2 + A[j][j] ** 2) ** 0.5) + else: + p = np.sign(A[j][j]) * ((A[i][j] ** 2 + A[j][j] ** 2) ** 0.5) + c = A[j][j] / p + s = A[i][j] / p n, m = np.shape(A) J = np.eye(n) J[j][j] = c @@ -99,7 +103,15 @@ def main(): Hier kann beliebiger Testcode stehen, der bei der Korrektur vollständig ignoriert wird. """ - pass + arr1 = np.array(([3, -4], [3, 5])) + J1 = givens_rotation(arr1, 1, 0) + arr2 = np.array(([3, 4], [3, 5])) + J2 = givens_rotation(arr2, 1, 0) + Q, R = qr_decompose(arr1) + print(f"J1= {J1}") + print(f"J2= {J2}") + print(f"J1*arr= {np.dot(J1, arr1)}") + print(f"J2*arr= {np.dot(J2, arr2)}") if __name__ == "__main__": main() \ No newline at end of file -- GitLab