From 6a79b612b5e88dce28fb37db544fb872e683df06 Mon Sep 17 00:00:00 2001 From: Nivas Manduva <53264470+eviltypha@users.noreply.github.com> Date: Thu, 7 Oct 2021 15:44:27 +0530 Subject: [PATCH 01/19] Added Jacobi Iteration Method Added this method in arithmetic_analysis folder. This method is used to solve system of linear equations. --- .../jacobi_iteration_method.py | 160 ++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 arithmetic_analysis/jacobi_iteration_method.py diff --git a/arithmetic_analysis/jacobi_iteration_method.py b/arithmetic_analysis/jacobi_iteration_method.py new file mode 100644 index 000000000000..17a10b4ce8d3 --- /dev/null +++ b/arithmetic_analysis/jacobi_iteration_method.py @@ -0,0 +1,160 @@ +import numpy as np + + +def jacobi_iteration_method( + coefficient_matrix: np.ndarray, + constant_matrix: np.ndarray, + init_val: list, + iterations: int, +) -> list: + """ + Jacobi Iteration Method: + An iterative algorithm to determine the solutions of strictly diagonally dominant + system of linear equations + + 4x1 + x2 + x3 = 2 + x1 + 5x2 + 2x3 = -6 + x1 + 2x2 + 4x3 = -4 + + x_init = [0.5, -0.5 , -0.5] + + Examples: + + >>> coefficient = np.array([[4, 1, 1], [1, 5, 2], [1, 2, 4]]) + >>> constant = np.array([[2], [-6], [-4]]) + >>> init_val = [0.5, -0.5, -0.5] + >>> iterations = 3 + >>> jacobi_iteration_method(coefficient, constant, init_val, iterations) + [0.909375, -1.14375, -0.7484375] + + + >>> coefficient = np.array([[4, 1, 1], [1, 5, 2]]) + >>> constant = np.array([[2], [-6], [-4]]) + >>> init_val = [0.5, -0.5, -0.5] + >>> iterations = 3 + >>> jacobi_iteration_method(coefficient, constant, init_val, iterations) + Traceback (most recent call last): + ... + ValueError: Coefficient matrix dimensions must be nxn but received 2x3 + + + >>> coefficient = np.array([[4, 1, 1], [1, 5, 2], [1, 2, 4]]) + >>> constant = np.array([[2], [-6]]) + >>> init_val = [0.5, -0.5, -0.5] + >>> iterations = 3 + >>> jacobi_iteration_method(coefficient, constant, init_val, iterations) + Traceback (most recent call last): + ... + ValueError: Coefficient and constant matrices dimensions must be nxn and nx1 but + received 3x3 and 2x1 + + + >>> coefficient = np.array([[4, 1, 1], [1, 5, 2], [1, 2, 4]]) + >>> constant = np.array([[2], [-6], [-4]]) + >>> init_val = [0.5, -0.5] + >>> iterations = 3 + >>> jacobi_iteration_method(coefficient, constant, init_val, iterations) + Traceback (most recent call last): + ... + ValueError: Number of initial values must be equal to number of rows in coefficient + matrix but received 2 and 3 + + + >>> coefficient = np.array([[4, 1, 1], [1, 5, 2], [1, 2, 4]]) + >>> constant = np.array([[2], [-6], [-4]]) + >>> init_val = [0.5, -0.5, -0.5] + >>> iterations = 0 + >>> jacobi_iteration_method(coefficient, constant, init_val, iterations) + Traceback (most recent call last): + ... + ValueError: Iterations must be atleast 1 + + + >>> coefficient = np.array([[4, 1, 1], [1, 5, 2], [1, 2, 3]]) + >>> constant = np.array([[2], [-6], [-4]]) + >>> init_val = [0.5, -0.5, -0.5] + >>> iterations = 3 + >>> jacobi_iteration_method(coefficient, constant, init_val, iterations) + Traceback (most recent call last): + ... + ValueError: Coefficient matrix is not strictly diagonally dominant + """ + + rows1, cols1 = coefficient_matrix.shape + rows2, cols2 = constant_matrix.shape + + if rows1 != cols1: + raise ValueError( + f"Coefficient matrix dimensions must be nxn but received {rows1}x{cols1}" + ) + + if cols2 != 1: + raise ValueError(f"Constant matrix must be nx1 but received {rows2}x{cols2}") + + if rows1 != rows2: + raise ValueError( + f"""Coefficient and constant matrices dimensions must be nxn and nx1 but + received {rows1}x{cols1} and {rows2}x{cols2}""" + ) + + if len(init_val) != rows1: + raise ValueError( + f"""Number of initial values must be equal to number of rows in coefficient + matrix but received {len(init_val)} and {rows1}""" + ) + + if iterations <= 0: + raise ValueError("Iterations must be atleast 1") + + table = np.concatenate((coefficient_matrix, constant_matrix), axis=1) + + rows, cols = table.shape + + isDiagonallyDominant = strictly_diagonally_dominant(table) + + if isDiagonallyDominant is False: + raise ValueError("Coefficient matrix is not strictly diagonally dominant") + + for i in range(0, iterations): + new_val = [] + for row in range(0, rows): + temp = 0 + for col in range(0, cols): + if col == row: + denom = table[row][col] + elif col == cols - 1: + val = table[row][col] + else: + temp = temp + (-1) * table[row][col] * init_val[col] + temp = (temp + val) / denom + new_val.append(temp) + init_val = new_val + + return new_val + + +def strictly_diagonally_dominant(table: np.ndarray) -> bool: + + rows, cols = table.shape + + isDiagonallyDominant = True + + for i in range(0, rows): + sum = 0 + for j in range(0, cols - 1): + if i == j: + continue + else: + sum = sum + table[i][j] + + if table[i][i] <= sum: + isDiagonallyDominant = False + break + + return isDiagonallyDominant + + +if __name__ == "__main__": + import doctest + + doctest.testmod() From 2a3fd8e00375cf90a973573b984ee47dd922db31 Mon Sep 17 00:00:00 2001 From: Nivas Manduva <53264470+eviltypha@users.noreply.github.com> Date: Thu, 7 Oct 2021 15:48:59 +0530 Subject: [PATCH 02/19] Added comments --- arithmetic_analysis/jacobi_iteration_method.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arithmetic_analysis/jacobi_iteration_method.py b/arithmetic_analysis/jacobi_iteration_method.py index 17a10b4ce8d3..862013405a5e 100644 --- a/arithmetic_analysis/jacobi_iteration_method.py +++ b/arithmetic_analysis/jacobi_iteration_method.py @@ -1,6 +1,7 @@ import numpy as np +# Method to find solution of system of linear equations def jacobi_iteration_method( coefficient_matrix: np.ndarray, constant_matrix: np.ndarray, @@ -115,6 +116,7 @@ def jacobi_iteration_method( if isDiagonallyDominant is False: raise ValueError("Coefficient matrix is not strictly diagonally dominant") + # Iterates the whole matrix for given number of times for i in range(0, iterations): new_val = [] for row in range(0, rows): @@ -133,6 +135,7 @@ def jacobi_iteration_method( return new_val +# Checks if the given matrix is strictly diagonally dominant def strictly_diagonally_dominant(table: np.ndarray) -> bool: rows, cols = table.shape @@ -154,6 +157,7 @@ def strictly_diagonally_dominant(table: np.ndarray) -> bool: return isDiagonallyDominant +# Test Cases if __name__ == "__main__": import doctest From d9b9e1d84f78a1665c06e460fa5c4f47128b5a6c Mon Sep 17 00:00:00 2001 From: Nivas Manduva <53264470+eviltypha@users.noreply.github.com> Date: Thu, 7 Oct 2021 15:56:00 +0530 Subject: [PATCH 03/19] Added reference link --- arithmetic_analysis/jacobi_iteration_method.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arithmetic_analysis/jacobi_iteration_method.py b/arithmetic_analysis/jacobi_iteration_method.py index 862013405a5e..e89d16b277ad 100644 --- a/arithmetic_analysis/jacobi_iteration_method.py +++ b/arithmetic_analysis/jacobi_iteration_method.py @@ -1,3 +1,7 @@ +""" +Jacobi Iteration Method - https://en.wikipedia.org/wiki/Jacobi_method +""" + import numpy as np From ff09c1b0f7fea1533930d3d260fdde6157dcb9c3 Mon Sep 17 00:00:00 2001 From: Nivas Manduva <53264470+eviltypha@users.noreply.github.com> Date: Thu, 7 Oct 2021 16:09:21 +0530 Subject: [PATCH 04/19] Update jacobi_iteration_method.py --- .../jacobi_iteration_method.py | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/arithmetic_analysis/jacobi_iteration_method.py b/arithmetic_analysis/jacobi_iteration_method.py index e89d16b277ad..c83220643d29 100644 --- a/arithmetic_analysis/jacobi_iteration_method.py +++ b/arithmetic_analysis/jacobi_iteration_method.py @@ -74,15 +74,6 @@ def jacobi_iteration_method( ... ValueError: Iterations must be atleast 1 - - >>> coefficient = np.array([[4, 1, 1], [1, 5, 2], [1, 2, 3]]) - >>> constant = np.array([[2], [-6], [-4]]) - >>> init_val = [0.5, -0.5, -0.5] - >>> iterations = 3 - >>> jacobi_iteration_method(coefficient, constant, init_val, iterations) - Traceback (most recent call last): - ... - ValueError: Coefficient matrix is not strictly diagonally dominant """ rows1, cols1 = coefficient_matrix.shape @@ -115,10 +106,7 @@ def jacobi_iteration_method( rows, cols = table.shape - isDiagonallyDominant = strictly_diagonally_dominant(table) - - if isDiagonallyDominant is False: - raise ValueError("Coefficient matrix is not strictly diagonally dominant") + strictly_diagonally_dominant(table) # Iterates the whole matrix for given number of times for i in range(0, iterations): @@ -141,10 +129,22 @@ def jacobi_iteration_method( # Checks if the given matrix is strictly diagonally dominant def strictly_diagonally_dominant(table: np.ndarray) -> bool: + """ + >>> table = np.array([[4, 1, 1, 2], [1, 5, 2, -6], [1, 2, 4, -4]]) + >>> strictly_diagonally_dominant(table) + True + + >>> table = np.array([[4, 1, 1, 2], [1, 5, 2, -6], [1, 2, 3, -4]]) + >>> strictly_diagonally_dominant(table) + Traceback (most recent call last): + ... + ValueError: Coefficient matrix is not strictly diagonally dominant + + """ rows, cols = table.shape - isDiagonallyDominant = True + is_diagonally_dominant = True for i in range(0, rows): sum = 0 @@ -155,10 +155,13 @@ def strictly_diagonally_dominant(table: np.ndarray) -> bool: sum = sum + table[i][j] if table[i][i] <= sum: - isDiagonallyDominant = False + is_diagonally_dominant = False break - return isDiagonallyDominant + if is_diagonally_dominant is False: + raise ValueError("Coefficient matrix is not strictly diagonally dominant") + + return is_diagonally_dominant # Test Cases From cca524bec3aeb4e2624cfbf5664e6e47a7fb55db Mon Sep 17 00:00:00 2001 From: Nivas Manduva <53264470+eviltypha@users.noreply.github.com> Date: Mon, 11 Oct 2021 00:52:25 +0530 Subject: [PATCH 05/19] Changes for codespell test --- arithmetic_analysis/jacobi_iteration_method.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arithmetic_analysis/jacobi_iteration_method.py b/arithmetic_analysis/jacobi_iteration_method.py index c83220643d29..b8f3d2990d33 100644 --- a/arithmetic_analysis/jacobi_iteration_method.py +++ b/arithmetic_analysis/jacobi_iteration_method.py @@ -72,7 +72,7 @@ def jacobi_iteration_method( >>> jacobi_iteration_method(coefficient, constant, init_val, iterations) Traceback (most recent call last): ... - ValueError: Iterations must be atleast 1 + ValueError: Iterations must be at least 1 """ @@ -100,7 +100,7 @@ def jacobi_iteration_method( ) if iterations <= 0: - raise ValueError("Iterations must be atleast 1") + raise ValueError("Iterations must be at least 1") table = np.concatenate((coefficient_matrix, constant_matrix), axis=1) From 58503a365bb0ddde7ffd54aaf3a2b377bc5515f5 Mon Sep 17 00:00:00 2001 From: Nivas Manduva <53264470+eviltypha@users.noreply.github.com> Date: Fri, 15 Oct 2021 16:55:18 +0530 Subject: [PATCH 06/19] Update jacobi_iteration_method.py --- arithmetic_analysis/jacobi_iteration_method.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/arithmetic_analysis/jacobi_iteration_method.py b/arithmetic_analysis/jacobi_iteration_method.py index b8f3d2990d33..d8164a11700e 100644 --- a/arithmetic_analysis/jacobi_iteration_method.py +++ b/arithmetic_analysis/jacobi_iteration_method.py @@ -2,6 +2,8 @@ Jacobi Iteration Method - https://en.wikipedia.org/wiki/Jacobi_method """ +from typing import List + import numpy as np @@ -11,7 +13,7 @@ def jacobi_iteration_method( constant_matrix: np.ndarray, init_val: list, iterations: int, -) -> list: +) -> List[float]: """ Jacobi Iteration Method: An iterative algorithm to determine the solutions of strictly diagonally dominant From 4e81fa992c4afa62edbe4549578ab173265d0202 Mon Sep 17 00:00:00 2001 From: Nivas Manduva <53264470+eviltypha@users.noreply.github.com> Date: Fri, 15 Oct 2021 17:03:58 +0530 Subject: [PATCH 07/19] Update jacobi_iteration_method.py --- arithmetic_analysis/jacobi_iteration_method.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arithmetic_analysis/jacobi_iteration_method.py b/arithmetic_analysis/jacobi_iteration_method.py index d8164a11700e..097bcf6a921f 100644 --- a/arithmetic_analysis/jacobi_iteration_method.py +++ b/arithmetic_analysis/jacobi_iteration_method.py @@ -2,7 +2,7 @@ Jacobi Iteration Method - https://en.wikipedia.org/wiki/Jacobi_method """ -from typing import List +from __future__ import annotations import numpy as np @@ -13,7 +13,7 @@ def jacobi_iteration_method( constant_matrix: np.ndarray, init_val: list, iterations: int, -) -> List[float]: +) -> list[float]: """ Jacobi Iteration Method: An iterative algorithm to determine the solutions of strictly diagonally dominant From 047d159ed53a473a89957149830bf536223bc682 Mon Sep 17 00:00:00 2001 From: Nivas Manduva <53264470+eviltypha@users.noreply.github.com> Date: Fri, 15 Oct 2021 17:33:40 +0530 Subject: [PATCH 08/19] Update arithmetic_analysis/jacobi_iteration_method.py Co-authored-by: Christian Clauss --- arithmetic_analysis/jacobi_iteration_method.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/arithmetic_analysis/jacobi_iteration_method.py b/arithmetic_analysis/jacobi_iteration_method.py index 097bcf6a921f..384d281554e1 100644 --- a/arithmetic_analysis/jacobi_iteration_method.py +++ b/arithmetic_analysis/jacobi_iteration_method.py @@ -157,11 +157,7 @@ def strictly_diagonally_dominant(table: np.ndarray) -> bool: sum = sum + table[i][j] if table[i][i] <= sum: - is_diagonally_dominant = False - break - - if is_diagonally_dominant is False: - raise ValueError("Coefficient matrix is not strictly diagonally dominant") + raise ValueError("Coefficient matrix is not strictly diagonally dominant") return is_diagonally_dominant From f06339cfc3c59ea3543a4926b7705076eae43a45 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Fri, 15 Oct 2021 18:20:12 +0000 Subject: [PATCH 09/19] updating DIRECTORY.md --- DIRECTORY.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index d92dccca5afb..b1752fb0b3a0 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -4,6 +4,7 @@ * [Gaussian Elimination](https://github.com/TheAlgorithms/Python/blob/master/arithmetic_analysis/gaussian_elimination.py) * [In Static Equilibrium](https://github.com/TheAlgorithms/Python/blob/master/arithmetic_analysis/in_static_equilibrium.py) * [Intersection](https://github.com/TheAlgorithms/Python/blob/master/arithmetic_analysis/intersection.py) + * [Jacobi Iteration Method](https://github.com/TheAlgorithms/Python/blob/master/arithmetic_analysis/jacobi_iteration_method.py) * [Lu Decomposition](https://github.com/TheAlgorithms/Python/blob/master/arithmetic_analysis/lu_decomposition.py) * [Newton Forward Interpolation](https://github.com/TheAlgorithms/Python/blob/master/arithmetic_analysis/newton_forward_interpolation.py) * [Newton Method](https://github.com/TheAlgorithms/Python/blob/master/arithmetic_analysis/newton_method.py) @@ -53,6 +54,7 @@ * [A1Z26](https://github.com/TheAlgorithms/Python/blob/master/ciphers/a1z26.py) * [Affine Cipher](https://github.com/TheAlgorithms/Python/blob/master/ciphers/affine_cipher.py) * [Atbash](https://github.com/TheAlgorithms/Python/blob/master/ciphers/atbash.py) + * [Baconian Cipher](https://github.com/TheAlgorithms/Python/blob/master/ciphers/baconian_cipher.py) * [Base16](https://github.com/TheAlgorithms/Python/blob/master/ciphers/base16.py) * [Base32](https://github.com/TheAlgorithms/Python/blob/master/ciphers/base32.py) * [Base64 Encoding](https://github.com/TheAlgorithms/Python/blob/master/ciphers/base64_encoding.py) @@ -328,10 +330,12 @@ * [Graph Matrix](https://github.com/TheAlgorithms/Python/blob/master/graphs/graph_matrix.py) * [Graphs Floyd Warshall](https://github.com/TheAlgorithms/Python/blob/master/graphs/graphs_floyd_warshall.py) * [Greedy Best First](https://github.com/TheAlgorithms/Python/blob/master/graphs/greedy_best_first.py) + * [Greedy Min Vertex Cover](https://github.com/TheAlgorithms/Python/blob/master/graphs/greedy_min_vertex_cover.py) * [Kahns Algorithm Long](https://github.com/TheAlgorithms/Python/blob/master/graphs/kahns_algorithm_long.py) * [Kahns Algorithm Topo](https://github.com/TheAlgorithms/Python/blob/master/graphs/kahns_algorithm_topo.py) * [Karger](https://github.com/TheAlgorithms/Python/blob/master/graphs/karger.py) * [Markov Chain](https://github.com/TheAlgorithms/Python/blob/master/graphs/markov_chain.py) + * [Matching Min Vertex Cover](https://github.com/TheAlgorithms/Python/blob/master/graphs/matching_min_vertex_cover.py) * [Minimum Spanning Tree Boruvka](https://github.com/TheAlgorithms/Python/blob/master/graphs/minimum_spanning_tree_boruvka.py) * [Minimum Spanning Tree Kruskal](https://github.com/TheAlgorithms/Python/blob/master/graphs/minimum_spanning_tree_kruskal.py) * [Minimum Spanning Tree Kruskal2](https://github.com/TheAlgorithms/Python/blob/master/graphs/minimum_spanning_tree_kruskal2.py) @@ -497,6 +501,7 @@ * [Prime Numbers](https://github.com/TheAlgorithms/Python/blob/master/maths/prime_numbers.py) * [Prime Sieve Eratosthenes](https://github.com/TheAlgorithms/Python/blob/master/maths/prime_sieve_eratosthenes.py) * [Primelib](https://github.com/TheAlgorithms/Python/blob/master/maths/primelib.py) + * [Proth Number](https://github.com/TheAlgorithms/Python/blob/master/maths/proth_number.py) * [Pythagoras](https://github.com/TheAlgorithms/Python/blob/master/maths/pythagoras.py) * [Qr Decomposition](https://github.com/TheAlgorithms/Python/blob/master/maths/qr_decomposition.py) * [Quadratic Equations Complex Numbers](https://github.com/TheAlgorithms/Python/blob/master/maths/quadratic_equations_complex_numbers.py) From 97b2ad49f0e5d092f9078c3f87a5b6c93ea57c32 Mon Sep 17 00:00:00 2001 From: Nivas Manduva <53264470+eviltypha@users.noreply.github.com> Date: Sat, 16 Oct 2021 16:17:19 +0530 Subject: [PATCH 10/19] Update arithmetic_analysis/jacobi_iteration_method.py Co-authored-by: Christian Clauss --- arithmetic_analysis/jacobi_iteration_method.py | 1 - 1 file changed, 1 deletion(-) diff --git a/arithmetic_analysis/jacobi_iteration_method.py b/arithmetic_analysis/jacobi_iteration_method.py index 384d281554e1..f6327617b8c3 100644 --- a/arithmetic_analysis/jacobi_iteration_method.py +++ b/arithmetic_analysis/jacobi_iteration_method.py @@ -44,7 +44,6 @@ def jacobi_iteration_method( ... ValueError: Coefficient matrix dimensions must be nxn but received 2x3 - >>> coefficient = np.array([[4, 1, 1], [1, 5, 2], [1, 2, 4]]) >>> constant = np.array([[2], [-6]]) >>> init_val = [0.5, -0.5, -0.5] From 01bd5d189f8bf43a036c233235291e60db2ebe34 Mon Sep 17 00:00:00 2001 From: Nivas Manduva <53264470+eviltypha@users.noreply.github.com> Date: Sat, 16 Oct 2021 16:19:15 +0530 Subject: [PATCH 11/19] Update arithmetic_analysis/jacobi_iteration_method.py Co-authored-by: Christian Clauss --- arithmetic_analysis/jacobi_iteration_method.py | 1 - 1 file changed, 1 deletion(-) diff --git a/arithmetic_analysis/jacobi_iteration_method.py b/arithmetic_analysis/jacobi_iteration_method.py index f6327617b8c3..9efc91d7a0e9 100644 --- a/arithmetic_analysis/jacobi_iteration_method.py +++ b/arithmetic_analysis/jacobi_iteration_method.py @@ -54,7 +54,6 @@ def jacobi_iteration_method( ValueError: Coefficient and constant matrices dimensions must be nxn and nx1 but received 3x3 and 2x1 - >>> coefficient = np.array([[4, 1, 1], [1, 5, 2], [1, 2, 4]]) >>> constant = np.array([[2], [-6], [-4]]) >>> init_val = [0.5, -0.5] From 4f3f8ca317e8782860f0c7146409441385214f35 Mon Sep 17 00:00:00 2001 From: Nivas Manduva <53264470+eviltypha@users.noreply.github.com> Date: Sat, 16 Oct 2021 16:19:48 +0530 Subject: [PATCH 12/19] Update arithmetic_analysis/jacobi_iteration_method.py Co-authored-by: Christian Clauss --- arithmetic_analysis/jacobi_iteration_method.py | 1 - 1 file changed, 1 deletion(-) diff --git a/arithmetic_analysis/jacobi_iteration_method.py b/arithmetic_analysis/jacobi_iteration_method.py index 9efc91d7a0e9..37def2f53d98 100644 --- a/arithmetic_analysis/jacobi_iteration_method.py +++ b/arithmetic_analysis/jacobi_iteration_method.py @@ -64,7 +64,6 @@ def jacobi_iteration_method( ValueError: Number of initial values must be equal to number of rows in coefficient matrix but received 2 and 3 - >>> coefficient = np.array([[4, 1, 1], [1, 5, 2], [1, 2, 4]]) >>> constant = np.array([[2], [-6], [-4]]) >>> init_val = [0.5, -0.5, -0.5] From b5cd6f23472c7e2b150fee9f8addfd9c1fb13669 Mon Sep 17 00:00:00 2001 From: Nivas Manduva <53264470+eviltypha@users.noreply.github.com> Date: Sat, 16 Oct 2021 16:20:44 +0530 Subject: [PATCH 13/19] Update arithmetic_analysis/jacobi_iteration_method.py Co-authored-by: Christian Clauss --- arithmetic_analysis/jacobi_iteration_method.py | 1 - 1 file changed, 1 deletion(-) diff --git a/arithmetic_analysis/jacobi_iteration_method.py b/arithmetic_analysis/jacobi_iteration_method.py index 37def2f53d98..931a93f6f2b8 100644 --- a/arithmetic_analysis/jacobi_iteration_method.py +++ b/arithmetic_analysis/jacobi_iteration_method.py @@ -72,7 +72,6 @@ def jacobi_iteration_method( Traceback (most recent call last): ... ValueError: Iterations must be at least 1 - """ rows1, cols1 = coefficient_matrix.shape From 5144650e26bdb32fb6ffbbd10244e69df1c67c28 Mon Sep 17 00:00:00 2001 From: Nivas Manduva <53264470+eviltypha@users.noreply.github.com> Date: Sat, 16 Oct 2021 16:21:07 +0530 Subject: [PATCH 14/19] Update arithmetic_analysis/jacobi_iteration_method.py Co-authored-by: Christian Clauss --- arithmetic_analysis/jacobi_iteration_method.py | 1 - 1 file changed, 1 deletion(-) diff --git a/arithmetic_analysis/jacobi_iteration_method.py b/arithmetic_analysis/jacobi_iteration_method.py index 931a93f6f2b8..74438e5881e7 100644 --- a/arithmetic_analysis/jacobi_iteration_method.py +++ b/arithmetic_analysis/jacobi_iteration_method.py @@ -137,7 +137,6 @@ def strictly_diagonally_dominant(table: np.ndarray) -> bool: Traceback (most recent call last): ... ValueError: Coefficient matrix is not strictly diagonally dominant - """ rows, cols = table.shape From e9c9f360ddb406f4dc7ee6637bcef25a4411c353 Mon Sep 17 00:00:00 2001 From: Nivas Manduva <53264470+eviltypha@users.noreply.github.com> Date: Sat, 16 Oct 2021 16:21:56 +0530 Subject: [PATCH 15/19] Update arithmetic_analysis/jacobi_iteration_method.py Co-authored-by: Christian Clauss --- arithmetic_analysis/jacobi_iteration_method.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/arithmetic_analysis/jacobi_iteration_method.py b/arithmetic_analysis/jacobi_iteration_method.py index 74438e5881e7..88d94d3b4a2c 100644 --- a/arithmetic_analysis/jacobi_iteration_method.py +++ b/arithmetic_analysis/jacobi_iteration_method.py @@ -107,11 +107,12 @@ def jacobi_iteration_method( strictly_diagonally_dominant(table) # Iterates the whole matrix for given number of times - for i in range(0, iterations): + for i in range(iterations): new_val = [] - for row in range(0, rows): + for row in range(rows): temp = 0 - for col in range(0, cols): + for col in range(cols): + if col == row: denom = table[row][col] elif col == cols - 1: From 40185a1caccf86150dfa38eec133e0e619d1741e Mon Sep 17 00:00:00 2001 From: Nivas Manduva <53264470+eviltypha@users.noreply.github.com> Date: Tue, 19 Oct 2021 08:52:21 +0530 Subject: [PATCH 16/19] Update jacobi_iteration_method.py --- arithmetic_analysis/jacobi_iteration_method.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/arithmetic_analysis/jacobi_iteration_method.py b/arithmetic_analysis/jacobi_iteration_method.py index 88d94d3b4a2c..40f39605efaf 100644 --- a/arithmetic_analysis/jacobi_iteration_method.py +++ b/arithmetic_analysis/jacobi_iteration_method.py @@ -122,7 +122,9 @@ def jacobi_iteration_method( temp = (temp + val) / denom new_val.append(temp) init_val = new_val - + + new_val = [float(i) for i in new_val] + return new_val From f491ca06fae14e352eb2bf418f84f42782404ba4 Mon Sep 17 00:00:00 2001 From: Nivas Manduva <53264470+eviltypha@users.noreply.github.com> Date: Tue, 19 Oct 2021 09:01:50 +0530 Subject: [PATCH 17/19] Update jacobi_iteration_method.py --- arithmetic_analysis/jacobi_iteration_method.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arithmetic_analysis/jacobi_iteration_method.py b/arithmetic_analysis/jacobi_iteration_method.py index 40f39605efaf..b7dd1fb88398 100644 --- a/arithmetic_analysis/jacobi_iteration_method.py +++ b/arithmetic_analysis/jacobi_iteration_method.py @@ -122,9 +122,9 @@ def jacobi_iteration_method( temp = (temp + val) / denom new_val.append(temp) init_val = new_val - + new_val = [float(i) for i in new_val] - + return new_val From b214e3f9312cc5830573d22f99db8d93cc33d315 Mon Sep 17 00:00:00 2001 From: Nivas Manduva <53264470+eviltypha@users.noreply.github.com> Date: Tue, 19 Oct 2021 14:13:27 +0530 Subject: [PATCH 18/19] Update jacobi_iteration_method.py --- arithmetic_analysis/jacobi_iteration_method.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/arithmetic_analysis/jacobi_iteration_method.py b/arithmetic_analysis/jacobi_iteration_method.py index b7dd1fb88398..12d6fb6ee4bf 100644 --- a/arithmetic_analysis/jacobi_iteration_method.py +++ b/arithmetic_analysis/jacobi_iteration_method.py @@ -123,9 +123,7 @@ def jacobi_iteration_method( new_val.append(temp) init_val = new_val - new_val = [float(i) for i in new_val] - - return new_val + return [float(i) for i in new_val] # Checks if the given matrix is strictly diagonally dominant From 570ecc470c832759034586ff3f5ef93ac646910f Mon Sep 17 00:00:00 2001 From: John Law Date: Tue, 9 Nov 2021 22:34:13 +0800 Subject: [PATCH 19/19] fix styles --- arithmetic_analysis/jacobi_iteration_method.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/arithmetic_analysis/jacobi_iteration_method.py b/arithmetic_analysis/jacobi_iteration_method.py index 12d6fb6ee4bf..6674824255a1 100644 --- a/arithmetic_analysis/jacobi_iteration_method.py +++ b/arithmetic_analysis/jacobi_iteration_method.py @@ -1,7 +1,6 @@ """ Jacobi Iteration Method - https://en.wikipedia.org/wiki/Jacobi_method """ - from __future__ import annotations import numpy as np @@ -112,13 +111,12 @@ def jacobi_iteration_method( for row in range(rows): temp = 0 for col in range(cols): - if col == row: denom = table[row][col] elif col == cols - 1: val = table[row][col] else: - temp = temp + (-1) * table[row][col] * init_val[col] + temp += (-1) * table[row][col] * init_val[col] temp = (temp + val) / denom new_val.append(temp) init_val = new_val @@ -150,7 +148,7 @@ def strictly_diagonally_dominant(table: np.ndarray) -> bool: if i == j: continue else: - sum = sum + table[i][j] + sum += table[i][j] if table[i][i] <= sum: raise ValueError("Coefficient matrix is not strictly diagonally dominant")