ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 07.11.2023
Просмотров: 34
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
import numpy as np# Функции для метода простой итерацииdef power_iteration(A, iterations): n = A.shape[0] x = np.random.rand(n) x = x / np.linalg.norm(x) for i in range(iterations): x = np.dot(A, x) x = x / np.linalg.norm(x) lam = np.dot(np.dot(x, A), x.T) return lam, x# Функции для метода обратной итерацииdef solve_system(A, b): # Решение системы методом LU-разложения n = A.shape[0] L = np.identity(n) U = A.copy() for j in range(n-1): for i in range(j+1, n): lij = U[i,j] / U[j,j] L[i,j] = lij U[i,j:] -= U[j,j:] * lij y = np.zeros(n) for i in range(n): y[i] = b[i] - np.dot(L[i, :i], y[:i]) x = np.zeros(n) for i in range(n-1, -1, -1): x[i] = (y[i] - np.dot(U[i,i+1:], x[i+1:])) / U[i,i] return xdef inverse_iteration(A, mu, iterations): n = A.shape[0] I = np.identity(n) x = np.random.rand(n) for i in range(iterations): x = solve_system(A - mu*I, x) x = x / np.linalg.norm(x) lam = np.dot(np.dot(x, A), x.T) return lam, x# Функция для генерации матрицыdef generate_matrix(dim): A = np.random.randint(-10, 10, (dim, dim)) return np.dot(A.T, A)# Генерация матрицыS = generate_matrix(3)print("Матрица S:\n", S)# Поиск максимального по модулю собственного числаmax_iterations = 1000lam_max, x_max = power_iteration(S, max_iterations)print("Максимальное собственное число:", lam_max)print("Соответствующий собственный вектор:", x_max)# Поиск минимального по модулю собственного числаmin_iterations = 1000mu_min = 1e-5lam_min_inv, x_min_inv = inverse_iteration(S, mu_min, min_iterations)print("Минимальное собственное число:", lam_min_inv)print("Соответствующий собственный вектор:", x_min_inv)# Сравнение результатов с встроенной функциейlam, x = np.linalg.eigh(S)print("Собственные числа:", lam)print("Соответствующие собственные векторы:", x)print("Максимальное собственное число (встроенная функция):", lam[-1])print("Соответствующий собственный вектор (встроенная функция):", x[:, -1])print("Минимальное собственное число (встроенная функция):", lam[0])print("Соответствующий собственный вектор (встроенная функция):", x[:, 0])