Глава 4. Элементы матричной алгебры
данова форма), которая получается в результате преобразования исходной матрицы. Пример вычислений приведен ниже (жирным шрифтом выделен ввод пользователя):
>> A=[5 -3 2;6 -4 4;4 -4 5]
A =
5 |
-3 |
2 |
6 |
-4 |
4 |
4 |
-4 |
5 |
>> [V,D]=jordan(A) |
|
||
V = |
|
1.0000 |
1.0000 |
0.5000 |
|||
1.0000 |
2.0000 |
1.0000 |
|
1.0000 |
1.0000 |
0 |
|
D = |
0 |
0 |
|
3 |
|
||
0 |
1 |
0 |
|
0 |
0 |
2 |
|
>> inv(V)*A*V |
|
||
ans = |
0 |
0 |
|
3 |
|
||
0 |
1 |
0 |
|
0 |
0 |
2 |
|
>> V*D*inv(V) |
|
||
ans = |
-3 |
2 |
|
5 |
|
||
6 |
-4 |
4 |
|
4 |
-4 |
5 |
|
>> [U,B]=eig(A) |
|
|
U = |
-0.7071 |
0.3333 |
-0.4082 |
||
-0.8165 |
-0.7071 |
0.6667 |
-0.4082 |
-0.0000 |
0.6667 |
B = |
0 |
0 |
1.0000 |
||
0 |
2.0000 |
0 |
0 |
0 |
3.0000 |
>> inv(U)*A*U ans =
1.0000 -0.0000 -0.0000 -0.0000 2.0000 0.0000 0.0000 -0.0000 3.0000
>> U*B*inv(U) ans =
5.0000 -3.0000 2.0000
6.0000 -4.0000 4.0000
4.0000 -4.0000 5.0000
191
Самоучитель Matlab
На рис. 4.31 представлена начальная часть документа с командным кодом, в котором матрица диагонализируется с помощью функции jordan().
Рис. 4.31. Диагонализация матрицы с помощью функции jordan()
После объявления матрицы A командой [V,D]=jordan(A) вычисляется матрица преобразования V и диагональная (в данном случае) матрица D – результат преобразования матрицы A.
На заметку
По определению функцией jordan() на основании матрицы ˆ (аргумент
A
ˆ |
ˆ |
ˆ−1 ˆ ˆ |
функции) вычисляется матрица V |
такая, что матрица D |
=V AV диаго- |
нальная или, в общем случае, имеет жорданов вид (блочно-диагональная). Из
ˆ |
ˆ−1 ˆ ˆ |
ˆ |
ˆ ˆ ˆ−1 |
ˆ−1 |
ˆ |
условия D |
=V AV |
следует, что A =VDV |
. При этом условие V |
=V ′ |
|
в общем случае не выполняется. Поэтому не совсем корректно называть матри-
цу ˆ матрицей перехода в том смысле, как это излагалось выше. Для устране-
V
ния возможных недоразумений будем называть матрицу ˆ матрицей преобра-
V
зования.
ˆ |
ˆ−1 ˆ ˆ |
ˆ |
ˆ ˆ ˆ−1 |
. Для |
Далее проверяются два соотношения: D |
=V AV |
и A =VDV |
||
этого используем команды inv(V)*A*V и V*D*inv(V) соответственно. В первом случае получаем матрицу D, а во втором случае получаем матрицу A (рис. 4.32).
192
Глава 4. Элементы матричной алгебры
Рис. 4.32. Проверка результата диагонализации
Практически те же результаты можно получить с помощью функции eig(). На рис. 4.33 приведен фрагмент документа, в котором командой [U,B]=eig(A) на основе матрицы A вычисляется диагональная матрица B и матрица преобразования U.
В результате выполнения команды inv(U)*A*U получаем матрицу B, а в результате выполнения команды U*B*inv(U) получаем матрицу A. При этом матрица B фактически совпадает с матрицей D, вычисленной ранее, – те же собственные числа на диагонали, только в другом порядке. Возникает естественный вопрос: в чем же разница? Разница есть, и она существенная. Связана она в основном с матрицей преобразования. Столбцы матрицы преобразования, возвращаемой функцией eig(), нормированы на единицу, чего не скажешь о матрице преобразования, возвращаемой функцией jordan().
На заметку
Порядок следования собственных чисел на диагонали у диагональной матрицы определяет порядок следования столбцов в матрице перехода. Другими словами, при диагонализации матрицы конечная диагональная форма содержит на главной диагонали собственные числа исходной матрицы. В принципе, они могут следовать в разном порядке. Матрицы перехода для разных диагональных форм отличаются порядком следования столбиков. Сами столбики матрицы преобразования представляют собой собственные векторы исходной матрицы.
Имеет смысл также рассмотреть процедуру диагонализации симметричной матрицы. Матрицу создаем так:
193
Самоучитель Matlab
Рис. 4.33. Диагонализация матрицы с помощью функции eig()
>> A=[1 2 3;2 2 6;3 6 -1]
A =
1 2 3
2 2 6
36 -1
Матрицу перехода и диагональную форму вычисляем следующей командой:
>> [S,B]=eig(A) |
|
|
S = |
0.8842 |
0.4283 |
0.1864 |
||
0.5639 |
-0.4532 |
0.6904 |
-0.8046 |
-0.1128 |
0.5831 |
B = |
0 |
0 |
-5.9000 |
||
0 |
-0.4080 |
0 |
0 |
0 |
8.3080 |
194
Глава 4. Элементы матричной алгебры
В данном случае получена именно матрица перехода, поскольку произведение этой матрицы на транспонированную дает единичную матрицу:
>> S*S' |
|
|
ans = |
0.0000 |
0 |
1.0000 |
||
0.0000 |
1.0000 |
0 |
0 |
0 |
1.0000 |
Ее определитель по модулю равен единице:
>> det(S) ans =
-1.0000
Процесс этих вычислений проиллюстрирован на рис. 4.34.
Рис. 4.34. Диагонализация симметричной матрицы с помощью функции eig()
195