1"""Практическая работа 10, часть 2: машинная проверка расчётов."""23import matplotlib.pyplot as plt4import numpy as np567S = 98G = 329K = 1101112def build_main_matrix(s: int, g: int) -> np.ndarray:13 p = 2 * g + 2 * s14 m = -s - 2 * g15 return np.array(16 [17 [p / 6, m / 6, 2 * s / 6],18 [m / 6, (2 * p + s) / 6, m / 6],19 [2 * s / 6, m / 6, p / 6],20 ],21 dtype=float,22 )232425def build_extra_system(s: int, g: int, k: int) -> tuple[np.ndarray, np.ndarray]:26 matrix = np.array(27 [28 [4, -1, 1, -1, 0, 0],29 [1, 5, 1, 0, -1, 0],30 [s, g, 2 * (s + g + k), 0, 0, -1],31 [-1, 0, 0, 4, -1, 0],32 [0, -1, 0, -1, 4, -1],33 [0, 0, -1, 0, -1, 4],34 ],35 dtype=float,36 )3738 vector = np.array(39 [40 s - g + 4 * k,41 s - g + k + 9,42 2 * (s - g) * (s + g + k) + k * s,43 -10,44 4 - 2 * g,45 9 * g - s - 1,46 ],47 dtype=float,48 )49 return matrix, vector505152def normalize_first_component(vector: np.ndarray) -> np.ndarray:53 return vector / vector[0]545556def print_report(57 matrix: np.ndarray,58 eigenvalues: np.ndarray,59 eigenvectors: np.ndarray,60 lambda_max: float,61 vector_max: np.ndarray,62 row_sums: np.ndarray,63 extra_solution: np.ndarray,64) -> None:65 print("Практическая работа 10, часть 2")66 print("=" * 36)6768 print("\nПараметры варианта:")69 print(f"S = {S}, G = {G}, K = {K}")7071 print("\nМатрица A:")72 print(matrix)7374 print("\nСобственные числа:")75 print(eigenvalues)7677 print("\nСобственные векторы:")78 print(eigenvectors)7980 print("\nМаксимальное собственное число:")81 print(lambda_max)8283 print("\nСоответствующий вектор после нормировки:")84 print(vector_max)8586 print("\nСуммы элементов по строкам:")87 print(row_sums)8889 print("\nКороткое замечание:")90 print(91 "Все суммы строк равны 4.5, и число 4.5 присутствует в спектре. "92 "Следовательно, вектор (1, 1, 1) является собственным вектором "93 "матрицы для собственного числа λ = 4.5."94 )9596 print("\nПроверка равенства A @ v и λ * v:")97 print("A @ v =")98 print(matrix @ normalize_first_component(vector_max))99 print("λ * v =")100 print(lambda_max * normalize_first_component(vector_max))101102 print("\nРешение дополнительной системы:")103 print(extra_solution)104105106def plot_spectrum(eigenvalues: np.ndarray) -> None:107 x = np.arange(len(eigenvalues))108109 plt.figure(figsize=(8, 5))110 plt.bar(x, eigenvalues, width=0.45)111 plt.xticks(x, [f"λ{i + 1}" for i in range(len(eigenvalues))])112 plt.title("Спектр матрицы A")113 plt.xlabel("Номер собственного числа")114 plt.ylabel("Значение")115 plt.grid(axis="y", alpha=0.3)116 plt.tight_layout()117 plt.show()118119120def main() -> None:121 matrix = build_main_matrix(S, G)122 eigenvalues, eigenvectors = np.linalg.eig(matrix)123124 max_index = int(np.argmax(eigenvalues))125 lambda_max = float(eigenvalues[max_index])126 vector_max = normalize_first_component(eigenvectors[:, max_index])127 row_sums = matrix.sum(axis=1)128129 extra_matrix, extra_vector = build_extra_system(S, G, K)130 extra_solution = np.linalg.solve(extra_matrix, extra_vector)131132 print_report(133 matrix,134 eigenvalues,135 eigenvectors,136 lambda_max,137 vector_max,138 row_sums,139 extra_solution,140 )141 plot_spectrum(eigenvalues)142143144if __name__ == "__main__":145 main()