Advertisement
Korotkodul

Задача 2. Без базиса не выйдет

Mar 1st, 2025 (edited)
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.91 KB | None | 0 0
  1. import numpy as np
  2.  
  3. class ShapeMismatchError(Exception):
  4.     pass
  5.  
  6. def get_projections_components(
  7.     matrix: np.ndarray,
  8.     vector: np.ndarray,
  9. ):# -> tuple[np.ndarray | None, np.ndarray | None]:
  10.     if matrix.shape[0] != matrix.shape[1] or matrix.shape[0] != vector.shape[0]:
  11.         raise ShapeMismatchError
  12.     if np.linalg.det(matrix) == 0:
  13.         return None, None
  14.     coordinates_in_the_basis = np.linalg.solve(matrix.T, vector.T)
  15.     zero_matrix = np.zeros(shape = matrix.shape)
  16.     #coordinates_of_projections = np.diag(coordinates_in_the_basis)
  17.     coordinates_of_projections = coordinates_in_the_basis * matrix
  18.     orthogonal_projections = vector[np.newaxis, :] - coordinates_of_projections
  19.  
  20.     print("coordinates_of_projections")
  21.     print(coordinates_of_projections)
  22.     print()
  23.  
  24.     print("basis")
  25.     print(matrix)
  26.     print()
  27.  
  28.     print("vector")
  29.     print(vector)
  30.     print()
  31.  
  32.     print("coordinates_in_the_basis")
  33.     print(coordinates_in_the_basis)
  34.     print()
  35.  
  36.     print("zero_matrix")
  37.     print(zero_matrix)
  38.     print()
  39.  
  40.     print("vector[np.newaxis, :]")
  41.     print(vector[np.newaxis, :])
  42.     print()
  43.  
  44.     print("orthogonal_projections")
  45.     print(orthogonal_projections)
  46.     print()
  47.     return coordinates_of_projections, orthogonal_projections
  48.  
  49. matrix = np.diag([2, 3])
  50. vector = np.arange(start=1, stop=3)
  51. projections_expected = np.array([[1, 0], [0, 2]])
  52. orthogonals_expected = np.array([[0, 2], [1, 0]])
  53.  
  54. projections, orthogonals = get_projections_components(matrix, vector)
  55.  
  56. print("res")
  57. print()
  58.  
  59. print("res_projections")
  60. print(projections)
  61. print()
  62.  
  63. print("res_orthogonals")
  64. print(orthogonals)
  65. print()
  66.  
  67. print("projections_expected")
  68. print(projections_expected)
  69. print()
  70.  
  71. print("orthogonals_expected")
  72. print(orthogonals_expected)
  73. print()
  74.  
  75. assert np.allclose(projections, projections_expected)
  76. assert np.allclose(orthogonals, orthogonals_expected)
  77.  
  78.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement