ЭВМ_Семестр4_Лаба9
.pdfОн может быть представлен в главных осях:
|
(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 упущена важная деталь: метод итераций вычисляет максимальное по модулю собственное значение!