Скачиваний:
0
Добавлен:
12.01.2026
Размер:
1.56 Mб
Скачать

Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации

Федеральное государственное бюджетное образовательное учреждение Высшего образования «Санкт-Петербургский государственный университет телекоммуникаций им. Проф. М. А. Бонч-Бруевича» (СПбГУТ)

Факультет Информационных технологий и программной инженерии

Кафедра Программной инженерии

Лабораторная работа 5

По дисциплине: Разработка приложений искусственного интеллекта в киберфизических системах

Выполнил студент: Яковлев М. А. ИКПИ-32

Принял работу: Ерофеев С. А.

Дата выполнения:

«14» декабря 2025 г.

Санкт-Петербург

2025 г.

Постановка задачи

Разработать программу на Haskell для определения собственных значений обобщённой проблемы Ax = λBx методом итераций в подпространстве.

Алгоритм программы

Для достижения данной цели необходимо выполнить следующие задачи:

1. Загрузка данных: считать матрицы A и B из файлов.

2. Проверка корректности: убедиться, что матрицы квадратные и одинакового размера (N > 0), а B — обратима.

3. Приведение к стандартной форме: преобразовать задачу к виду Mx = λx, где M = B^{-1} * A.

4. Решение методом итераций в подпространстве:

· Выбрать начальное приближение для подпространства собственных векторов (например, единичную матрицу).

· Итерационно уточнять подпространство, умножая его на матрицу M и проводя ортогонализацию (процесс Грамма-Шмидта).

5. Вычисление собственных значений: после сходимости вычислить собственные значения.

Алгоритм итераций

1. Выбираются несколько нормированных и взаимно ортогональных векторов. Эти вектора удобно представить себе в виде матрицы. Например, единичной матрицы S:

S =

2. Выполняется итерация, которая в данном случае представляет собой умножение исследуемой матрицы М на матрицу S.

В этот момент проверяется сходимость. Если отношения элементов первого столбца C и соответствующих элементов первого столбца S одинаковы (в реальных вычислениях очень близки), то первый столбец есть собственный вектор, соответствующий наибольшему собственному значению матрицы. Само же это отношение и будет искомым собственным значением:

3. Столбцы полученной матрицы C ортонормируют (процесс Грамма-Шмидта). Полученную матриц обозначаем S и ее столбцы рассматриваем как очередное приближение собственных векторов.

4. Переход ко второму шагу алгоритма и продолжение итераций до достижения сходимости. Алгоритм итераций в подпространстве используется, когда надо определить несколько собственных значений и соответствующих векторов.

Процесс Грамма-Шмидта

Из набора векторов V выбирается один и нормируется, например, V2:

Полученный нормированный вектор V2 служит основой для удаления компоненты из других векторов, например, из V1. V1 — это исходный вектор (Vj), из которого удаляется проекция на V2. В результате получается V3 — вектор V1 без проекции на V2.

Удаление проекции осуществляется по формуле:

В контексте алгоритма Грамма-Шмидта:

1. Сначала выбирается первый вектор и нормируется.

2. Затем из всех остальных векторов удаляется компонента вдоль этого нормированного вектора.

3. После этого выбирается следующий вектор, нормируется, и процесс повторяется.

Перечень функций

  1. epsilon — константа для сравнения чисел с нулём.

  2. safeDiv — деление двух чисел.

  3. dotProduct — скалярное произведение двух векторов.

  4. vectorNorm — евклидова норма вектора.

  5. vectorNormalization — нормализация вектора до единичной длины.

  6. addRows — поэлементное сложение двух векторов.

  7. multRowNum — умножение вектора на скаляр.

  8. absElem — модуль числа.

  9. isRealZero — проверка, является ли число нулем.

  10. isRealsEqual — проверка равенства двух вещественных чисел с учётом точности.

  11. divReal — безопасное поэлементное деление векторов.

  12. extractRowElement — извлечение элемента из вектора по индексу.

  13. extractMatrixElement — извлечение элемента матрицы по индексам строки и столбца.

  14. extractRow — извлечение строки матрицы.

  15. modRowInMatrix — замена строки в матрице.

  16. exchangeRowsInMatrix — перестановка двух строк в матрице.

  17. transposeMatrix — транспонирование матрицы.

  18. multMatrixElem — элемент произведения двух матриц.

  19. multMatrixRow — произведение матрицы на строку другой матрицы.

  20. multMatrix — умножение двух матриц.

  21. eyeMatrix — единичная матрица заданного размера.

  22. findMaxAbsInColumn — поиск строки с максимальным по модулю элементом в столбце.

  23. eliminateColumn — исключение столбца в алгоритме Гаусса.

  24. invGaussIterDiv — итерация деления ведущего элемента в Гауссе-Жордане.

  25. invGaussIter — итерация алгоритма Гаусса-Жордана с выбором главного элемента.

  26. invGauss — вычисление обратной матрицы методом Гаусса-Жордана.

  27. inv — вспомогательная функция для функции invGauss.

  28. minElementOfVector — минимальный элемент вектора.

  29. maxElementOfVector — максимальный элемент вектора.

  30. isEigenvectorStable — проверка устойчивости собственного вектора.

  31. isEigenvectorsStable — проверка устойчивости набора собственных векторов.

  32. calcEigenvalue — вычисление собственного значения по вектору и матрице.

  33. calcEigenvalues — вычисление собственных значений для набора векторов.

  34. removeComponent — удаление компоненты одного вектора из другого.

  35. removeComponentFromVectors — удаление компоненты из набора векторов.

  36. grammSchmidt — ортогонализация Грамма-Шмидта.

  37. processCandidates — обработка кандидатов на собственные векторы.

  38. generateBetterInitialVectors — генерация улучшенных начальных векторов.

  39. findEigenvectorsLimited — поиск собственных векторов с ограничением итераций.

  40. findEigenvectors — основной алгоритм поиска собственных векторов методом итерации.

  41. isMatrixSymmetric — проверка симметричности матрицы.

  42. checkDimensions — проверка корректности размерностей матриц.

  43. prettyPrintMatrix — вывод матрицы.

  44. readMatrixFromFile — чтение матрицы из текстового файла.

Схема

Рисунок 1. Блок схема основной программы

Рисунок 2. Вычисление обратной матрицы

Рисунок 3. Нахождение собственных векторов

Рисунок 4. Алгоритм Грамма-Шмидта