Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Маркова Вычислит методы алгебры Практикум.doc
Скачиваний:
204
Добавлен:
14.04.2015
Размер:
3.88 Mб
Скачать

Лабораторная работа № 13

Цель: изучить метод Данилевского для нахождения собственных значений и собственных векторов.

Задание

1. В классе «FrobeniusMatrix» («Матрица Фробениуса»), который наследуется от класса «SquareMatrix» («Квадратная матрица»), сформируйте матрицу Фробениуса.

2. В классе «DirectMethodsE» («Прямые методы нахождения собственных значений») реализуйте метод Данилевского («danilevskyMethod») для нахождения собственных значений и собственных векторов матрицы.

Для реализации метода используйте объекты матричных классов «FrobeniusMatrix», «SquareMatrix» и «Vector». Для выполнения основных матричных операций (перемножение матриц, умножение матрицы на вектор) используйте методы, реализованные в матричном классе «SquareMatrix».

3. Методом Данилевского найдите собственные значения и собственные векторы матрицы в соответствии с вариантом.

4. Решите ту же задачу, используя пакет для математических вычислений.

5. Сравните результат выполнения п. 3 с решением, полученным в п. 4.

Варианты заданий

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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

Рассмотрим степенной метод нахождения наибольшего по модулю собственного значения и соответствующего собственного вектора [10].

Рассмотрим вещественную квадратную матрицу

.

Пусть – ее собственные значения, а – собственные вектора, соответствующие этим собственным значениям, т.е.

.

Будем считать, что матрица А обладает полной системой линейно-независимых собственных векторов, т.е. все предполагаем линейно-независимыми.

Это будет иметь место, например, если матрица А симметрична () или если все ее собственные значенияразличны.

Тогда систему собственных векторов можно считать базисомn-мерного векторного пространства.

Выберем некоторый вектор в качестве начального итерационного приближения и рассмотрим следующую последовательность векторов:

.(1)

Выразим вектор на k-ой итерации через вектор начального приближения.

Разложим вектор начального приближения по базису

, (2)

где  некоторые вещественные числа.

Тогда для вектора получаем

.

Из определения любого собственного вектора можем записать

.

Следовательно,

(3)

или по компонентам

, (4)

где i-ая компонента вектора ; i-ые компоненты собственных векторов соответственно.

Рассмотрим случай, когда матрица А имеет единственное максимальное по модулю вещественное собственное значение.

Обозначим его и пронумеруем остальные собственные значения в порядке убывания их модулей, так что будем иметь

. (5)

Будем считать, что . Если это не так, то выбираем другой вектор начального приближения .

В силу (4), (5) имеем для i-ой компоненты вектора :

(6)

Так как в силу соотношения (5) все слагаемые вида при больших значениях k.

Аналогично для i-ой компоненты вектора можем записать:

. (7)

Рассмотрим отношение соответствующих компонент вектора Y на двух соседних итерациях:

(8)

Построим итерационную последовательность

(9)

Эта последовательность сходится к исходному собственному значению при k → ∞ и любом i=1, 2, …, n.

Таким образом, для нахождения с точностьюнужно выбрать любой номерi и построить итерационную последовательность (9), заканчивая итерации по условию

.

Аналогичным образом можно найти собственный вектор , соответствующий собственному значению:

Так как собственный вектор определяется с точностью до постоянного множителя, отсюда находим

,

где строится по правилу (1).

Итерационным методом может быть найдено любое последующее собственное значение матрицы. Запишем формулу для нахождения собственного значения и собственного вектора[20]:

.

Пример 1. Методом итераций определить наибольшее по модулю собственное значение и соответствующий ему собственный вектор с точностью

.

Решение:

Строим последовательность векторов по правилу:

,

где – произвольный вектор.

Тогда имеем

,

где и – одноименные координаты двух последовательных векторов.

В качестве начального приближения возьмем , найдем ,

,

.

Найдем

,

.

Проверяем условие . Не выполняется, следовательно продолжаем итерационный процесс.

Найдем

,

.

Проверяем условие . Условие не выполняется, продолжаем итерации.

Точность достигнута на 8 итерации. Получаем

,

собственное значение.

Собственный вектор

или .

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

Данный метод описан в классе «SquareMatrix».

Реализация на языке программирования С++ может иметь следующий вид:

Vector SquareMatrix :: multiply_vec (SquareMatrix A, Vector f){

/*Результирующий вектор*/

double *res = new double[A.getRowCount()];

for (int i = 0; i < A.getRowCount(); i++){

for (int j = 0; j < A.getColCount(); j++){

res[i] += A.elements[i][j] * f.getElement(j);

}

}

}

/* Создание вектора */

return Vector(A.getRowCount(), res);

}