Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЭВМ_Семестр4_Лаба9

.pdf
Скачиваний:
16
Добавлен:
05.06.2015
Размер:
939.74 Кб
Скачать

Он может быть представлен в главных осях:

 

(0)

 

 

 

x

 

c1e1

c2 e2

... cn en

Где ei - i-ый собственный вектор.

Опираясь на это представление выполним по (15) k итерации:

 

 

 

A(

 

...

 

)

 

A

 

...

 

A

 

 

 

 

x(1)

Ax(0)

c1

 

cn

 

 

 

 

 

 

 

c1e1

 

 

 

cn en

 

 

e1

 

 

 

 

en

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c1 1 e1 ... cn n en

;

 

(2)

 

(1)

A(c1

 

2

 

 

 

 

2

 

c1

 

2

 

 

 

2

 

 

x

 

Ax

 

 

e1 ...

cn n en)

 

A e1

... cn n A en

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

1

 

 

 

2

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c1 1 e1

... cn n en

;

 

 

 

 

k

 

 

 

 

k

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x(k )

Ax(k 1) c1 1 e1

... cn n en

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k

 

 

 

 

 

 

 

 

 

 

 

 

k

 

 

 

k

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k

 

c

 

 

2

 

 

...

c

 

 

n

 

 

 

 

 

 

 

 

e

 

 

e

 

 

 

 

 

 

c e

 

1

 

 

 

 

n 1

 

 

 

c e

 

 

 

 

1

 

1 1

 

2

 

2

 

 

 

 

 

 

n

 

1

1 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

будет уменьшаться от итерации к итерации, а

Вектор (k )

 

 

 

 

 

 

i k

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

, так как lim

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Для i = 2, . . . , n , поскольку

 

i

 

1.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

lim (k ) 0

k

Из вывода ясно, что если k велико, то

 

(k 1)

 

k 1

 

 

 

 

 

x

 

 

 

(c e ) y

 

 

 

1

 

1

1

 

(17)

 

 

 

 

 

x

(k ) k (c e

) y ,

 

 

 

1

1

 

1

 

 

 

 

 

 

( k 1)

 

( k )

почти

Где

– малая величина, то есть векторы y

x

и y

x

коллинеарны. На рисунках 5.a и 5.б в зависимости от знака 1 они либо

Рисунок 5 а), б)

почти одинаково, либо почти противоположно направлены.

Из соотношений (17) следует, что величину 1 можно найти из соотношений

1

y 1

 

y2

при y1 , y2 0

 

y2

 

y1

 

или, чтобы исключить деление на ноль, использовать (способ 1) максимальную по модулю компоненту вектора

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

ym

,

г де

 

y

 

 

 

 

 

 

 

 

 

 

max(

 

y1

 

,...,

 

yi

 

,...,

 

yn

 

)

(18)

 

 

 

 

 

 

 

ym

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Другой способ 2 нахождения , использует отношение Релея

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

cos

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

y T y

 

 

y

 

 

 

 

 

y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

 

 

y

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

 

 

 

 

y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

при

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

cos

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(19)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

 

 

1

 

 

y

 

 

 

 

 

при

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

6

2

 

 

?

A

 

 

;

 

2

3

 

1 max

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Зададим

x 0

 

 

 

и выполним два приближения

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x 1 Ax 0

6

2

 

0

 

 

6

2

2 1

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

3

 

1

 

 

2

0

 

 

3

 

 

 

 

 

 

 

 

 

 

 

3 1

 

 

 

 

 

 

 

 

6

2 2

6 2

2 3

18

 

 

 

 

x 2 Ax 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

3 3

2 3

3 3

13

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

k

 

 

 

 

0

1

 

 

2

 

3

4

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x k 1

 

 

0

2

 

18

 

137

954

6710

 

 

 

k

 

 

 

 

 

 

 

 

....

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

3

 

13

 

75

493

3387

 

 

 

 

 

 

 

 

 

 

 

 

 

Определим 1

на основании 4-го и 5-го приближения:

 

Способ 1.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6710

7.034

 

 

 

 

 

 

 

 

 

 

 

1

954

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Способ 2.

 

 

 

954 6710

493 3387

6.9991

1

 

 

 

 

 

 

 

 

9542

4932

 

 

 

 

Пример показывает, что при

 

 

 

несколько

к

 

 

 

 

больших 1 вектор х

очень быстро растет и может переполнить разрядную сетку машинного

числа. При 1

k

убывает до нуля, что также не желательно.

x

Поэтому для вычислений на ЭВМ векторы нормируют. Для способа 2

вектор

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x(k 1) выгодно приводить к единичной длине, то есть

 

 

 

 

 

(k 1)

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

x(k 1)

 

 

 

 

e(k 1)

 

 

 

(k 1)

 

 

 

 

 

(k 1)

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

 

x

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В этом случае отношение Релея принимает вид:

 

 

 

(k )

 

(k 1)

)

 

 

 

 

 

(x

 

, e

 

 

1

 

(k 1)

 

(k 1)

)

(x(k ) , e(k 1) )

(20)

 

 

(e

 

 

, e

 

 

 

 

 

Алгоритм и программа вычисления наибольшего по модулю

собственного

 

значения

1

и

соответствующего ему

собственного

вектора

 

 

 

;

 

назначают

 

 

в качестве

начального

е, к : 0

 

х 0 ;

е 0

приближения

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k : k 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x(k )

: A e(k 1)

 

 

 

 

 

 

 

 

 

(k ) x k 1 , e(k 1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ИТЕРАЦИЯ:

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k

 

 

k

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

!нормирование

 

 

 

 

 

 

 

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(k )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

 

 

 

 

 

Если

 

к

к 1

 

 

идти к ИТЕРАЦИЯ

 

 

 

 

 

 

 

 

 

1

1

 

 

 

 

 

 

 

 

 

 

 

 

 

k

 

 

 

(k )

 

 

 

 

 

Иначе ПЕЧАТЬ

k, 1

 

, e

; СТОП.

 

 

 

Алгоритм расчета для назначаемого (в операторе Const) размера N матрицы А реализован в следующей программе:

Sub MIter()

 

Const N = 1

' Наиб индекс в массивах

Const LIMIT = 99

' Предельное число итераций

Const Delta = 0.001

' Абсолютная погрешность С.З.

Dim A(0 To N, 0 To N), X(0 To N), e(0 To N)

' Для ввода-вывода массивов импортируй Модуль IOMas.bas (см. в [2], №2810)

Call FromRangeToMatr(A, N, N)

' Ввод матрицы A из диапазона _

 

' ячеек рабочего листа Excel

Call FromRangeToMas(e, N)

' Ввод массива е.

ALM0 = 0

 

For k = 1 To 99

 

Call PMV(A, e, X, N) ' вычисление вектора X=A*E

ALAM1 = 0

DL = 0

For i = 0 To N ' ALAM1 -приближ. к С. З. И DL - длины вектора Х

ALAM1 = ALAM1 + X(i) * e(i)

DL = DL + X(i) ^ 2

Next i

 

DL = Sqr(DL)

 

For i = 0 To N

' нормирование вектора Х

e(i) = X(i) / DL

 

Next i

'проверка условия окончания итерации

If Abs(ALAM1 - ALAM0) <= Delta Then Exit For

ALAM0 = ALAM1

Next k

If k > LIMIT Then

Debug.Print " НЕ ВЕРЕНЫЙ результат:"

End If

Debug.Print "Число итераций k="; k; " Собств.знач. ALAM1="; ALAM1

Debug.Print "

C.B.=";

 

Call PrnMas(e, N, 0, "e")

' вывод собственного вектора

End Sub

 

 

Sub PMV(M(), v(), r(), ByVal N) ' перемножение матрицы на вектор

For i = 0 To N

r(i) = 0

For j = 0 To N

r(i) = r(i) + M(i, j) * v(j)

Next j

Next i

End Sub

Замечание 1. Программа использует обращение к не приведенной

здесь процедуре PMV, вычисляющей произведение

x Ae

(объявленное как N × N ) матрицы А на вектор e .

2. В программе предусмотрено выполнять максимум 99 итераций, после чего расчет прекращают, считая, что не удается достичь заданной точности.

Для выполнения расчета по программе 1 приведенной (2×2) матрицы А изменены 1-ый оператор на

Const N = 2 и введен

Const Delta = 0.001

6

2

0

2 3 1

Программа выдает следующие результаты:

Число итераций k= 6 Собств.знач. ALAM1= 6,99992749912387

C.B.=Массив e(0:1)

0,893940101555758 0,448186450967095

Замечание по расчету:

1. Умеренные требования к точности вычислений собственного значения еще не гарантирует высокой точности определения собственного вектора. Если важна точность вычисления собственного вектора, следует, либо уменьшать DELTA , либо заканчивать итерации после достаточного сближения вычисляемых собственных векторов.

2. Полезно повторить расчет при ином начальном векторе (или случайным образом выбрать несколько начальных векторов). Это

гарантирует от неудачного попадания на иной базисный вектор

ei , i 1 .

Нахождение наименьшего по модулю собственного значения

Для собственного значения невырожденной матрицы можно записать

 

 

 

 

A

1

 

 

A

1

A

1

 

Ax

x

 

Ax

 

 

x

 

 

1

 

1

 

 

 

 

1

 

 

1

 

 

1

A

x

 

 

x A

x A

 

, г де

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Если - минимальное по модулю собственное значение, то будет наибольшим по модулю. Определив методом итераций, получим:

1

Особенности реализации вычислений

Итерационный шаг

 

(k 1)

A

1

(k )

;

 

(k 1)

?

x

 

e

 

x

 

состоит в вычислении вектора x(k 1) из системы линейных уравнений

 

 

 

?

Ax(k 1)

e(k ) ;

x(k 1)

Предварительно целесообразно выполнить разложение матрицы в произведение треугольных матриц A = LU, а затем на каждом шаге решать систему

LUx(k 1) e(k )

Y

Определяя сначала y из уравнения

(k )

Ly e ,

(k 1)

азатем x из уравнения

(k 1)

Ux y.

Решение в MATLAB полной проблемы собственных значений

Часто в пособиях [3], [4] для симметричных матриц рассматривают итерационный метод Якоби как наиболее простой, хотя и требующий значительного объѐма вычислений. Используемые в MATLAB функции позволяют решать полную проблему собственных значений для различных типов матриц.

Универсальная функция eig(A) даѐт возможность получить:

1) либо только все собственные значения матрицы (в виде вектора),

>> A=[6 2; 2 3]

A =

 

6

2

2

3

>>Lambda=eig(A) Lambda =

2.0000

7.0000

2)либо все нормированные собственные векторы и диагональную матрицу с соответствующими собственными значениями.

>>A=[6 2; 2 3]

A =

6 2

23

>>[R,D]= eig(A)

R =

0.4472 -0.8944 -0.8944 -0.4472

D =

2.0000

0

0

7.0000

Функция [R,D]=eig(A) возвращает в диагональную матрицу D собственные значения, а в матрицу R по столбцам – нормированные собственные векторы, удовлетворяющие соотношению A · R = R · D .

Задание к расчѐтно-графической работе*

1.Для (2×2)-матрицы, взятой из верхнего левого угла матрицы A своего варианта задания, решить «вручную» полную проблему собственных значений (см. в примере 1). То есть получить компактные формулы (возможно включающие радикалы), выражающие собственные значения и составляющие нормированных (по ∞ − ой норме) собственных векторов, и вычислить по ним значения с тремя знаками после запятой. Проверить вычисленные значения в MATLAB.

2.Для (2×2)-матрицы (см. п. 1), определить «вручную» наибольшее по модулю собственное значение и собственный вектор методом итераций (см. пример 6).

3.Для (3×3)-матрицы A вычислить в VBA наибольшее по модулю собственное значение методом итераций и соответствующий ему собственный вектор.

4.Для (3×3)-матрицы A решить в MATLAB полную проблему собственных значений. Сравнить максимальное по модулю собственное значение и его собственный вектор с полученным в пункте 2.

*) Задание к РГР №11 из пособия [4] не выполнять! В нѐм требуется «вычислить методом итераций максимальное собственное значение (СЗ)» матрицы A. Однако для вариантов заданий, заимствованных (вместе с другими материалами) из методических указаний [3], где большинство матриц имеют отрицательные собственные значения, вычислить методом итераций максимальное СЗ невозможно! Автором РГР №11 упущена важная деталь: метод итераций вычисляет максимальное по модулю собственное значение!