С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: Научные вычисления
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 01.11.2021
Сообщений: 25

Степенной метод на python. Алгебраические проблемы собственных значений

28.02.2025, 10:50. Показов 1925. Ответов 1

Студворк — интернет-сервис помощи студентам
Задание: надо решить степенным методом y^(k)=A^(k-m)y^(m), m∈{0,1,...,k-1}, k-m=2^n, n∈{0,1,...} для нахождения старшей собственной пары {l,x^1}

На вход подаю матрицу:
4 1 2
1 3 0
2 0 5

Получаю результат:
Собственное значение: 1.0
Собственный вектор: [0.5773502691896258, 0.5773502691896258, 0.5773502691896258]

Почему у меня не выполняется A*l=l*x?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
def read_matrix_from_file(filename):
    with open(filename, 'r') as file:
        lines = file.readlines()
        matrix = []
        for line in lines:
            row = list(map(float, line.split()))
            matrix.append(row)
        return matrix
 
def matrix_multiply(A, B):
    n = len(A)
    m = len(B[0]) if isinstance(B[0], list) else 1
    result = [[0] * m for _ in range(n)]  # Инициализация результирующей матрицы
 
    for i in range(n):
        for j in range(m):
            sum_product = 0
            for k in range(len(B)):
                sum_product += A[i][k] * (B[k][j] if isinstance(B[0], list) else B[k])
            result[i][j] = sum_product
    return result
 
def matrix_power(A, k):
    n = len(A) 
    result = []
    for i in range(n):
        row = []
        for j in range(n):
            if i == j:
                row.append(1)
            else:
                row.append(0)
        result.append(row) 
 
    while k > 0:
        if k % 2 != 0:
            result = matrix_multiply(result, A)
        A = matrix_multiply(A, A)
        k //= 2 
    return result
 
def vector_norm(v):
    squared_sum = 0
    for x in v:
        squared_sum += x ** 2 
 
    norm = squared_sum ** 0.5 
    return norm
 
def normalize(v):
    norm = vector_norm(v)
    normalized_vector = []
    for x in v:
        normalized_vector.append(x / norm) 
    return normalized_vector
 
def power_method(A, max_iterations=1000, delta=1e-10):
    n = len(A) 
    y_m = [1.0] * n 
    x_m = normalize(y_m)
 
    lambda_prev = [0] * n 
 
    for k in range(1, max_iterations + 1):
        m = 1
        while m < k:  # Находим максимальную степень двойки, меньшую k
            m *= 2
        
        # Вычисляем y^(k) = A^(k-m) * y^(m)
        A_k_minus_m = matrix_power(A, k - m)  # Возводим A в степень (k - m)
 
        y_m_column = []
        for val in y_m:
            y_m_column.append([val])
 
        y_k = matrix_multiply(A_k_minus_m, y_m_column)  
 
        one_dimensional_y_k = []
        for val in y_k:
            one_dimensional_y_k.append(val[0])
 
        y_k = one_dimensional_y_k 
 
        y_k = normalize(y_k)
 
        # Вычисляем λ^(k)_i
        lambda_k = []
        for i in range(n):
            if abs(x_m[i]) > delta:
                lambda_k.append(y_k[i] / x_m[i])  # Вычисляем собственное число
            else:
                lambda_k.append(0)
 
        # Проверяем, что текущая итерация больше 1 и разница между текущими и предыдущими собственными числами меньше заданного порога delta
        if k > 1 and all(abs(lambda_k[i] - lambda_prev[i]) < delta for i in range(n)):
            eigenvalue = sum(lambda_k) / len(lambda_k)
            return eigenvalue, y_k
 
        lambda_prev = lambda_k
        x_m = y_k
 
   
    return None, None
 
def write_result_to_file(filename, eigenvalue, eigenvector):
    with open(filename, 'w') as file:
        file.write(f"Собственное значение: {eigenvalue}\n")
        file.write(f"Собственный вектор: {eigenvector}\n")
 
 
A = read_matrix_from_file('input.txt')
 
eigenvalue, eigenvector = power_method(A)
 
if eigenvalue is not None and eigenvector is not None:
    write_result_to_file('output.txt', eigenvalue, eigenvector)
else:
    with open('output.txt', 'w') as file:
        file.write("Не удалось найти собственное значение.\n")
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.02.2025, 10:50
Ответы с готовыми решениями:

Вычисление собственных значений и собственных векторов матрицы. Метод скалярных произведений
Курсовая работа!! Задание: &quot;Вычисление собственных значений и собственных векторов матрицы. Метод скалярных произведений&quot; ...

Вычисление собственных значений и собственных векторов матрицы. Метод скалярных произведений
Вычисление собственных значений и собственных векторов матрицы. Метод скалярных произведений кто может реализовать этот метод в...

Метод Данилевского для вычисления собственных векторов и собственных значений матрицы
Разработать программную реализацию на языке С++ в среде VisualStudio. Она должна содержать реализацию метода Данилевского для вычисления...

1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38164 / 21099 / 4306
Регистрация: 12.02.2012
Сообщений: 34,687
Записей в блоге: 14
02.03.2025, 20:13
Цитата Сообщение от RoboCop3000 Посмотреть сообщение
Получаю результат:
Собственное значение: 1.0
- это неправильный результат. У этой матрицы собственные значения (методом Якоби) такие:

1.8548973087995997
3.4760236029181115
6.66907908828229
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.03.2025, 20:13
Помогаю со студенческими работами здесь

Метод итераций: нахождение собственных векторов и собственных значений матрицы
Доброго времени суток. метод итерации нахождение собственных векторов и собственных значений матрицы - вот тема на которую нужно написать...

Итерационный степеной метод нахождения собственных значений и собственных векторов
дайте ссылки по теме итерационный степеной метод нахождения собственных значений и собственных векторов

вычисление собственных значений и собственных векторов матриц. метод обратных итераций с отношениями рэлея
вычисление собственных значений и собственных векторов матриц. метод обратных итераций с отношениями рэлея. помогите кому не жалко с...

Метод бисекции поиска собственных значений матрицы
Здравствуйте. Собственно необходимо реализовать данный алгоритм. Делал по этому сайту...

Метод Якоби для нахождения собственных значений
Дано: матрица симметричная. Найти собственные значения методом вращений Якоби, выбрав максимальный по модулю недиагональный элемент. (В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru