From 3d73407cc346784077a5a467807f59ff47de621d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Kowalczyk?= Date: Wed, 15 Apr 2026 21:39:52 +0200 Subject: [PATCH 1/4] added matrix second and inf norms implementation --- matrix_calculus/matrix_norms.py | 34 +++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/matrix_calculus/matrix_norms.py b/matrix_calculus/matrix_norms.py index 40d774b..300a64c 100644 --- a/matrix_calculus/matrix_norms.py +++ b/matrix_calculus/matrix_norms.py @@ -47,3 +47,37 @@ def p_norm(matrix: np.array, p: int, n_samples: int = 1000, cond_number=True): res = (max_val, condidion_number) if cond_number else max_val return res + + +def first_norm(matrix: np.array, cond_number=False): + columns_sums = np.sum(np.abs(matrix), axis=0) + m_1 = np.max(columns_sums) + + if cond_number: + try: + matrix_inv = np.linalg.inv(matrix) + norm_M_inv = first_norm(matrix_inv, cond_number=False) + condition_number = m_1 * norm_M_inv + except np.linalg.LinAlgError: + condition_number = np.inf + + return m_1, condition_number + + return m_1 + + +def inf_norm(matrix: np.array, cond_number=False): + rows_sums = np.sum(np.abs(matrix), axis=1) + m_inf = np.max(rows_sums) + + if cond_number: + try: + matrix_inv = np.linalg.inv(matrix) + norm_M_inv = inf_norm(matrix_inv, cond_number=False) + condition_number = m_inf * norm_M_inv + except np.linalg.LinAlgError: + condition_number = np.inf + + return m_inf, condition_number + + return m_inf From b117b4a15d1fb5690f181a5cd838dbb34a53bb76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Kowalczyk?= Date: Wed, 15 Apr 2026 21:45:23 +0200 Subject: [PATCH 2/4] added tests for matrix m1 and inf norms --- tests/matrix_norms_test.py | 46 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/tests/matrix_norms_test.py b/tests/matrix_norms_test.py index ea0f039..c21d6b2 100644 --- a/tests/matrix_norms_test.py +++ b/tests/matrix_norms_test.py @@ -3,6 +3,8 @@ import numpy as np import pytest # noqa: F401 +from matrix_calculus.matrix_norms import first_norm +from matrix_calculus.matrix_norms import inf_norm from matrix_calculus.matrix_norms import p_norm from matrix_calculus.matrix_norms import second_norm @@ -25,3 +27,47 @@ def test_p_norm_2(): matrix = np.array([[1, 2, 3], [3, 2, 1], [10, 15, 20]]) m_2, condition_number = p_norm(matrix, p=2) assert np.allclose(m_2, 27.343, rtol=0.01) + + +def test_m_1_norm(): + matrix1 = np.array([[4, 9, 2], [3, 5, 7], [8, 1, 6]]) + m_1, cond = first_norm(matrix1, cond_number=True) + + # Porównanie z NumPy + expected_m1 = np.linalg.norm(matrix1, ord=1) + expected_cond = np.linalg.cond(matrix1, p=1) + + assert np.allclose(m_1, expected_m1), f"Błąd normy m1: {m_1} != {expected_m1}" + assert np.allclose(cond, expected_cond), f"Błąd cond m1: {cond} != {expected_cond}" + + matrix2 = np.array([[1, 2, 3], [3, 2, 1], [10, 15, 20]]) + m_1, cond = first_norm(matrix2, cond_number=True) + + expected_m1 = np.linalg.norm(matrix2, ord=1) + expected_cond = np.linalg.cond(matrix2, p=1) + + assert np.allclose(m_1, expected_m1) + assert np.allclose(cond, expected_cond) + + +def test_m_inf_norm(): + matrix1 = np.array([[4, 9, 2], [3, 5, 7], [8, 1, 6]]) + m_inf, cond = inf_norm(matrix1, cond_number=True) + + expected_minf = np.linalg.norm(matrix1, ord=np.inf) + expected_cond = np.linalg.cond(matrix1, p=np.inf) + + assert np.allclose( + m_inf, + expected_minf, + ), f"Błąd normy inf: {m_inf} != {expected_minf}" + assert np.allclose(cond, expected_cond), f"Błąd cond inf: {cond} != {expected_cond}" + + matrix2 = np.array([[1, 2, 3], [3, 2, 1], [10, 15, 20]]) + m_inf, cond = inf_norm(matrix2, cond_number=True) + + expected_minf = np.linalg.norm(matrix2, ord=np.inf) + expected_cond = np.linalg.cond(matrix2, p=np.inf) + + assert np.allclose(m_inf, expected_minf) + assert np.allclose(cond, expected_cond) From 971551b819951214aee6cc6398a9c0110b3062ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Kowalczyk?= Date: Wed, 15 Apr 2026 22:30:24 +0200 Subject: [PATCH 3/4] finished matrix norms report markdown --- reports/matrix_norms_report.md | 124 ++++++++++++++++++++++++++++++--- 1 file changed, 116 insertions(+), 8 deletions(-) diff --git a/reports/matrix_norms_report.md b/reports/matrix_norms_report.md index e651ddc..8b14ffd 100644 --- a/reports/matrix_norms_report.md +++ b/reports/matrix_norms_report.md @@ -2,27 +2,121 @@ *Autorzy: Maja Byrecka, Michał Kowalczyk* +## Norma 1 + +Norma indukowana $||M||_1$ wskazuje na maksymalne wzmocnienie sumy bezwzględnych wartości wektora po przekształceniu przez macierz. + +**Złożoność obliczeniowa:** Zaledwie $\mathcal{O}(n^2)$ dla wyznaczenia samej normy dla macierzy $n \times n$. Obliczenie współczynnika uwarunkowania podnosi złożoność do $\mathcal{O}(n^3)$. + +### Algorytm + +``` +1. Oblicz sumy wartości bezwzględnych elementów dla każdej kolumny macierzy M. +2. Znajdź maksymalną wartość z obliczonych sum i zapisz w m_1. +3. Jeśli wymagane jest obliczenie współczynnika uwarunkowania: + 3.1. Oblicz macierz odwrotną M_inv. + 3.2. Wywołaj first_norm dla M_inv (bez liczenia współczynnika). + 3.3. Współczynnik uwarunkowania = m_1 * norm_M_inv. +4. Zwróć m_1 (oraz współczynnik uwarunkowania jeśli obliczono). +``` + +### Kod + +```python +def first_norm(matrix: np.array, cond_number=False): + columns_sums = np.sum(np.abs(matrix), axis=0) + m_1 = np.max(columns_sums) + + if cond_number: + try: + matrix_inv = np.linalg.inv(matrix) + norm_M_inv = first_norm(matrix_inv, cond_number=False) + condition_number = m_1 * norm_M_inv + except np.linalg.LinAlgError: + condition_number = np.inf + + return m_1, condition_number + + return m_1 +``` + +### Wynik dla Macierzy M + +Dla macierzy M = [[4, 9, 2], [3, 5, 7], [8, 1, 6]], norma macierzowa M_1 wynosi `15`, a współczynnik uwarunkowania wynosi `5.333333333333333`. + ## Norma 2 +Norma indukowana $||M||_2$ odpowiada największej wartości własnej macierzy. + +Złożoność obliczeniowa: Jest to operacja, wymagająca wyznaczenia rozkładu według wartości własnych macierzy. Złożoność wynosi $\mathcal{O}(n^3)$. + ### Algorytm ``` -1. Znajdź wartości własne macierzy M -2. Zwróć maksymalną wartość własną +1. Znajdź wartości własne macierzy M. +2. Norma m_2 to największa wartość własna macierzy M. +3. Współczynnik uwarunkowania to stosunek największej wartości własnej do najmniejszej. +4. Zwróć m_2 oraz obliczony współczynnik uwarunkowania. ``` ### Kod -```python3 -def second_norm(matrix: np.array) -> float: +```python +def second_norm(matrix: np.array): singular_values = np.linalg.svd(matrix, compute_uv=False) - return np.max(singular_values) + s = np.linalg.svd(matrix, compute_uv=False) + m_2 = np.max(singular_values) + condition_number = s.max() / s.min() + + return m_2, condition_number ``` ### Wynik dla Macierzy M Dla macierzy M = [[4, 9, 2], [3, 5, 7], [8, 1, 6]], norma macierzowa wyznaczona w powyższy sposób, z parametrem `p=2` wynosiła `15.000000000000002`. +## Norma inf + +Norma indukowana nieskończoność $||M||_\infty$ definiuje najgorszy możliwy przypadek wzmocnienia sygnału dla pojedynczej współrzędnej wyjściowej. + +Złożoność obliczeniowa: Podobnie jak w przypadku normy 1, wynosi $\mathcal{O}(n^2)$ dla sumowania i wyznaczenia normy oraz $\mathcal{O}(n^3)$ dla obliczenia współczynnika uwarunkowania. + +### Algorytm + +``` +1. Oblicz sumy wartości bezwzględnych elementów dla każdego wiersza macierzy M. +2. Znajdź maksymalną wartość z obliczonych sum i przypisz do m_inf. +3. Jeśli wymagane jest obliczenie współczynnika uwarunkowania: + 3.1. Oblicz macierz odwrotną M_inv. + 3.2. Wywołaj inf_norm dla M_inv (bez liczenia współczynnika) i wynik zapisz w norm_M_inv. + 3.3. Współczynnik uwarunkowania = m_inf * norm_M_inv. +4. Zwróć m_inf (oraz współczynnik uwarunkowania jeśli obliczono). +``` + +### Kod + +```python +def inf_norm(matrix: np.array, cond_number=False): + rows_sums = np.sum(np.abs(matrix), axis=1) + m_inf = np.max(rows_sums) + + if cond_number: + try: + matrix_inv = np.linalg.inv(matrix) + norm_M_inv = inf_norm(matrix_inv, cond_number=False) + condition_number = m_inf * norm_M_inv + except np.linalg.LinAlgError: + condition_number = np.inf + + return m_inf, condition_number + + return m_inf +``` + +### Wynik dla Macierzy M + +Dla przykładowej macierzy M = [[4, 4, 2], [3, 2, 7], [8, 8, 3]], norma macierzowa M_inf wynosi `19`, a współczynnik uwarunkowania wynosi `370.5`. + ## Dowolna Norma P Dowolną normę *p* można obliczyć jako: @@ -30,6 +124,8 @@ Dowolną normę *p* można obliczyć jako: ![Źródło: Wykład - Wartości i wektory własne & Dekompozycja na wartości osobliwe 2026, Maciej Paszyński](imgs/matrix_p_norm.png) *Źródło: Wykład - Wartości i wektory własne & Dekompozycja na wartości osobliwe 2026, Maciej Paszyński* +W ten sposób możliwe jest obliczenie przybliżonej wartości dowolnej normy p macierzy. Złożoność algorytmu to $\mathcal{O}(k \cdot n^2)$, gdzie $k$ to liczba próbek. + ### Pseudokod ``` @@ -42,16 +138,19 @@ Dowolną normę *p* można obliczyć jako: 2.5. matrix_p <- p-norma wektora matrix_x 2.6. Jeśli matrix_p>max_val: 2.6.1. max_val <- matrix_p -3. Zwróć max_val + 2.6.2. Jeśli liczymy uwarunkowanie: oblicz odwrotność M_inv, wywołaj p_norm dla M_inv i zaktualizuj condition_number. +3. Zwróć max_val lub krotkę kax_val, condition_number jeśli obliczono uwarunkowanie ``` ### Algorytm ```python -def p_norm(matrix: np.array, p: int, n_samples: int =1000): +def p_norm(matrix: np.array, p: int, n_samples: int = 1000, cond_number=True): n = matrix.shape[1] max_val = 0.0 + if cond_number: + condidion_number = np.inf # Search for max value of the norm calculated from matrix multiplied by a randomly generated vector for _ in range(n_samples): @@ -71,7 +170,16 @@ def p_norm(matrix: np.array, p: int, n_samples: int =1000): if val > max_val: max_val = val - return max_val + if cond_number: + try: + matrix_inv = np.linalg.inv(matrix) + norm_M_inv = p_norm(matrix_inv, p, n_samples, cond_number=False) + condidion_number = max_val * norm_M_inv + except np.linalg.LinAlgError: + condidion_number = np.inf + + res = (max_val, condidion_number) if cond_number else max_val + return res ``` ### Wynik dla Macierzy M From 81375bb62793ba1cbb56a3dcdbf94200d4e1cf10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Kowalczyk?= Date: Wed, 15 Apr 2026 22:42:08 +0200 Subject: [PATCH 4/4] changed mathematical symbols to normal text in matrix norms report markdown and generated report --- reports/matrix_norms_report.md | 14 ++-- reports/resources/matrix-norms/code.txt | 94 ++++++++++++++++++++-- reports/resources/matrix-norms/report.pdf | Bin 35038 -> 40726 bytes 3 files changed, 96 insertions(+), 12 deletions(-) diff --git a/reports/matrix_norms_report.md b/reports/matrix_norms_report.md index 8b14ffd..872fe88 100644 --- a/reports/matrix_norms_report.md +++ b/reports/matrix_norms_report.md @@ -4,9 +4,9 @@ ## Norma 1 -Norma indukowana $||M||_1$ wskazuje na maksymalne wzmocnienie sumy bezwzględnych wartości wektora po przekształceniu przez macierz. +Norma indukowana ||M||_1 wskazuje na maksymalne wzmocnienie sumy bezwzględnych wartości wektora po przekształceniu przez macierz. -**Złożoność obliczeniowa:** Zaledwie $\mathcal{O}(n^2)$ dla wyznaczenia samej normy dla macierzy $n \times n$. Obliczenie współczynnika uwarunkowania podnosi złożoność do $\mathcal{O}(n^3)$. +Złożoność obliczeniowa: Zaledwie O(n^2) dla wyznaczenia samej normy dla macierzy n x n. Obliczenie współczynnika uwarunkowania podnosi złożoność do O(n^3). ### Algorytm @@ -46,9 +46,9 @@ Dla macierzy M = [[4, 9, 2], [3, 5, 7], [8, 1, 6]], norma macierzowa M_1 wynosi ## Norma 2 -Norma indukowana $||M||_2$ odpowiada największej wartości własnej macierzy. +Norma indukowana ||M||_2 odpowiada największej wartości własnej macierzy. -Złożoność obliczeniowa: Jest to operacja, wymagająca wyznaczenia rozkładu według wartości własnych macierzy. Złożoność wynosi $\mathcal{O}(n^3)$. +Złożoność obliczeniowa: Jest to operacja wymagająca wyznaczenia rozkładu według wartości własnych macierzy. Złożoność wynosi O(n^3). ### Algorytm @@ -77,9 +77,9 @@ Dla macierzy M = [[4, 9, 2], [3, 5, 7], [8, 1, 6]], norma macierzowa wyznaczona ## Norma inf -Norma indukowana nieskończoność $||M||_\infty$ definiuje najgorszy możliwy przypadek wzmocnienia sygnału dla pojedynczej współrzędnej wyjściowej. +Norma indukowana nieskończoność ||M||_inf definiuje najgorszy możliwy przypadek wzmocnienia sygnału dla pojedynczej współrzędnej wyjściowej. -Złożoność obliczeniowa: Podobnie jak w przypadku normy 1, wynosi $\mathcal{O}(n^2)$ dla sumowania i wyznaczenia normy oraz $\mathcal{O}(n^3)$ dla obliczenia współczynnika uwarunkowania. +Złożoność obliczeniowa: Podobnie jak w przypadku normy 1, wynosi O(n^2) dla sumowania i wyznaczenia normy oraz O(n^3) dla obliczenia współczynnika uwarunkowania. ### Algorytm @@ -124,7 +124,7 @@ Dowolną normę *p* można obliczyć jako: ![Źródło: Wykład - Wartości i wektory własne & Dekompozycja na wartości osobliwe 2026, Maciej Paszyński](imgs/matrix_p_norm.png) *Źródło: Wykład - Wartości i wektory własne & Dekompozycja na wartości osobliwe 2026, Maciej Paszyński* -W ten sposób możliwe jest obliczenie przybliżonej wartości dowolnej normy p macierzy. Złożoność algorytmu to $\mathcal{O}(k \cdot n^2)$, gdzie $k$ to liczba próbek. +W ten sposób możliwe jest obliczenie przybliżonej wartości dowolnej normy p macierzy. Złożoność algorytmu to O(k * n^2), gdzie k to liczba próbek. ### Pseudokod diff --git a/reports/resources/matrix-norms/code.txt b/reports/resources/matrix-norms/code.txt index 3f78b2e..0886e53 100644 --- a/reports/resources/matrix-norms/code.txt +++ b/reports/resources/matrix-norms/code.txt @@ -4,9 +4,11 @@ from __future__ import annotations import numpy as np import pytest # noqa: F401 -from scipy.linalg import norm -from matrix_calculus.matrix_norms import second_norm, p_norm +from matrix_calculus.matrix_norms import first_norm +from matrix_calculus.matrix_norms import inf_norm +from matrix_calculus.matrix_norms import p_norm +from matrix_calculus.matrix_norms import second_norm def test_m_2_norm(): @@ -18,6 +20,7 @@ def test_m_2_norm(): m_2, condition_number = second_norm(matrix) assert np.allclose(m_2, 27.343, rtol=0.01) + def test_p_norm_2(): matrix = np.array([[4, 9, 2], [3, 5, 7], [8, 1, 6]]) m_2, condition_number = p_norm(matrix, p=2) @@ -28,11 +31,57 @@ def test_p_norm_2(): assert np.allclose(m_2, 27.343, rtol=0.01) +def test_m_1_norm(): + matrix1 = np.array([[4, 9, 2], [3, 5, 7], [8, 1, 6]]) + m_1, cond = first_norm(matrix1, cond_number=True) + + # Porównanie z NumPy + expected_m1 = np.linalg.norm(matrix1, ord=1) + expected_cond = np.linalg.cond(matrix1, p=1) + + assert np.allclose(m_1, expected_m1), f"Błąd normy m1: {m_1} != {expected_m1}" + assert np.allclose(cond, expected_cond), f"Błąd cond m1: {cond} != {expected_cond}" + + matrix2 = np.array([[1, 2, 3], [3, 2, 1], [10, 15, 20]]) + m_1, cond = first_norm(matrix2, cond_number=True) + + expected_m1 = np.linalg.norm(matrix2, ord=1) + expected_cond = np.linalg.cond(matrix2, p=1) + + assert np.allclose(m_1, expected_m1) + assert np.allclose(cond, expected_cond) + + +def test_m_inf_norm(): + matrix1 = np.array([[4, 9, 2], [3, 5, 7], [8, 1, 6]]) + m_inf, cond = inf_norm(matrix1, cond_number=True) + + expected_minf = np.linalg.norm(matrix1, ord=np.inf) + expected_cond = np.linalg.cond(matrix1, p=np.inf) + + assert np.allclose( + m_inf, + expected_minf, + ), f"Błąd normy inf: {m_inf} != {expected_minf}" + assert np.allclose(cond, expected_cond), f"Błąd cond inf: {cond} != {expected_cond}" + + matrix2 = np.array([[1, 2, 3], [3, 2, 1], [10, 15, 20]]) + m_inf, cond = inf_norm(matrix2, cond_number=True) + + expected_minf = np.linalg.norm(matrix2, ord=np.inf) + expected_cond = np.linalg.cond(matrix2, p=np.inf) + + assert np.allclose(m_inf, expected_minf) + assert np.allclose(cond, expected_cond) + + ========== matrix_norms.py ========== +from __future__ import annotations + import numpy as np -def second_norm(matrix: np.array) -> float: +def second_norm(matrix: np.array): singular_values = np.linalg.svd(matrix, compute_uv=False) s = np.linalg.svd(matrix, compute_uv=False) m_2 = np.max(singular_values) @@ -40,7 +89,8 @@ def second_norm(matrix: np.array) -> float: return m_2, condition_number -def p_norm(matrix: np.array, p: int, n_samples: int =1000, cond_number=True): + +def p_norm(matrix: np.array, p: int, n_samples: int = 1000, cond_number=True): n = matrix.shape[1] max_val = 0.0 @@ -68,10 +118,44 @@ def p_norm(matrix: np.array, p: int, n_samples: int =1000, cond_number=True): if cond_number: try: matrix_inv = np.linalg.inv(matrix) - norm_M_inv = p_norm(matrix_inv, p, n_samples, cond_number = False) + norm_M_inv = p_norm(matrix_inv, p, n_samples, cond_number=False) condidion_number = max_val * norm_M_inv except np.linalg.LinAlgError: condidion_number = np.inf res = (max_val, condidion_number) if cond_number else max_val return res + + +def first_norm(matrix: np.array, cond_number=False): + columns_sums = np.sum(np.abs(matrix), axis=0) + m_1 = np.max(columns_sums) + + if cond_number: + try: + matrix_inv = np.linalg.inv(matrix) + norm_M_inv = first_norm(matrix_inv, cond_number=False) + condition_number = m_1 * norm_M_inv + except np.linalg.LinAlgError: + condition_number = np.inf + + return m_1, condition_number + + return m_1 + + +def inf_norm(matrix: np.array, cond_number=False): + rows_sums = np.sum(np.abs(matrix), axis=1) + m_inf = np.max(rows_sums) + + if cond_number: + try: + matrix_inv = np.linalg.inv(matrix) + norm_M_inv = inf_norm(matrix_inv, cond_number=False) + condition_number = m_inf * norm_M_inv + except np.linalg.LinAlgError: + condition_number = np.inf + + return m_inf, condition_number + + return m_inf diff --git a/reports/resources/matrix-norms/report.pdf b/reports/resources/matrix-norms/report.pdf index 4b9f1dddbfe264443103990506fd99aabe5e6ed0..3f394c3253b8cebf857c0a75e5e90ffe83075ae3 100644 GIT binary patch delta 31335 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 KlZ(oW!Tf)*chnXD delta 25588 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