Файл: # Решение системы методом luразложения.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 07.11.2023

Просмотров: 33

Скачиваний: 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])