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

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

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

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

Добавлен: 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])