ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 07.11.2023
Просмотров: 10
Скачиваний: 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 x
def 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 = 1000
lam_max, x_max = power_iteration(S, max_iterations)
print("Максимальное собственное число:", lam_max)
print("Соответствующий собственный вектор:", x_max)
# Поиск минимального по модулю собственного числа
min_iterations = 1000
mu_min = 1e-5
lam_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])