Собственные значения

Символьные собственные значения квадратной матрицы A или символьные собственные значения и собственные вектора A вычисляются, соответственно, с помощью команд E = eig(A) и [V,E] = eig(A).

Дубликатами переменной точности является E = eig(vpa(A)) и [V,E] = eig(vpa(A)).

Собственные значения A нули характеристического полинома A, det(A-x*I), который вычисляется charpoly(A).

Матричный H от последнего раздела обеспечивает первый пример:

H = sym([8/9 1/2 1/3; 1/2 1/3 1/4; 1/3 1/4 1/5])
H =
[ 8/9, 1/2, 1/3]
[ 1/2, 1/3, 1/4]
[ 1/3, 1/4, 1/5]

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

[T,E] = eig(H)

производит матрицы T и E. Столбцы T собственные вектора H и диагональные элементы E собственные значения H:

T =
[ 3/10, 218/285 - (4*12589^(1/2))/285, (4*12589^(1/2))/285 + 218/285]
[ -6/5,     292/285 - 12589^(1/2)/285,     12589^(1/2)/285 + 292/285]
[    1,                             1,                             1]
 
E =
[ 0,                       0,                       0]
[ 0, 32/45 - 12589^(1/2)/180,                       0]
[ 0,                       0, 12589^(1/2)/180 + 32/45]

Может быть легче изучить структуру матриц собственных векторов, T, и собственные значения, E, если вы преобразуете T и E к десятичной записи. Для этого продолжите можно следующим образом. Команды

Td = double(T)
Ed = double(E)

возврат

Td =
    0.3000   -0.8098    2.3397
   -1.2000    0.6309    1.4182
    1.0000    1.0000    1.0000

Ed =
         0         0         0
         0    0.0878         0
         0         0    1.3344

Первое собственное значение является нулем. Соответствующий собственный вектор (первый столбец Td) совпадает с базисом для ядра, найденным в последнем разделе. Другие два собственных значения являются результатом применения формулы корней квадратного уравнения к x26445x+2532160 который является квадратичным фактором в factor(charpoly(H, x)):

syms x
g = factor(charpoly(H, x))/x
solve(g(3))
g =
[ 1/(2160*x), 1, (2160*x^2 - 3072*x + 253)/x]
ans =
 32/45 - 12589^(1/2)/180
 12589^(1/2)/180 + 32/45

Закрытые символьные выражения формы для собственных значений возможны только, когда характеристический полином может быть описан как продукт рациональных полиномов степени четыре или меньше. Матрица Rosser является классической числовой аналитической тестовой матрицей, которая иллюстрирует это требование. Оператор

R = sym(rosser)

генерирует

R =
[  611,  196, -192,  407,   -8,  -52,  -49,   29]
[  196,  899,  113, -192,  -71,  -43,   -8,  -44]
[ -192,  113,  899,  196,   61,   49,    8,   52]
[  407, -192,  196,  611,    8,   44,   59,  -23]
[   -8,  -71,   61,    8,  411, -599,  208,  208]
[  -52,  -43,   49,   44, -599,  411,  208,  208]
[  -49,   -8,    8,   59,  208,  208,   99, -911]
[   29,  -44,   52,  -23,  208,  208, -911,   99]

Команды

p = charpoly(R, x);
factor(p)

произвести

ans =
 
[ x, x - 1020, x^2 - 1040500, x^2 - 1020*x + 100, x - 1000, x - 1000]

Характеристический полином (степени 8) факторы приятно в продукт двух линейных членов и трех квадратичных условий. Вы сразу видите, что четыре из собственных значений 0, 1020, и двойной корень в 1 000. Другие четыре корня получены из остающегося quadratics. Использование

eig(R)

найти все эти значения

ans =
                  0
               1000
               1000
               1020
 510 - 100*26^(1/2)
 100*26^(1/2) + 510
    -10*10405^(1/2)
     10*10405^(1/2)

Матрица Rosser не является типичным примером; для полного 8 8 матрица редко иметь характеристический полином что факторы в такую простую форму. Если вы изменяете два “угловых” элемента R от 29 до 30 с командами

S = R;
S(1,8) = 30;
S(8,1) = 30;

и затем попробуйте

p = charpoly(S, x)

вы находите

p =
x^8 - 4040*x^7 + 5079941*x^6 + 82706090*x^5...
 - 5327831918568*x^4 + 4287832912719760*x^3...
 - 1082699388411166000*x^2 + 51264008540948000*x...
 + 40250968213600000

Вы также находите тот factor(p) p самостоятельно. Таким образом, характеристический полином не может быть учтен по rationals.

Поскольку это изменило матрицу Rosser

F = eig(S)

возвращается

F = 
 -1020.053214255892
  -0.17053529728769
 0.2180398054830161
  999.9469178604428
  1000.120698293384
  1019.524355263202
  1019.993550129163
  1020.420188201505

Заметьте, что эти значения близко к собственным значениям исходной матрицы Rosser.

Также возможно попытаться вычислить собственные значения символьных матриц, но закрытые решения для формы редки. Преобразование Givens сгенерировано как матричный экспоненциал элементарной матрицы

A=[0110].

Команды Symbolic Math Toolbox™

syms t
A = sym([0 1; -1 0]);
G = expm(t*A)

возврат

G =
[           exp(-t*1i)/2 + exp(t*1i)/2,
    (exp(-t*1i)*1i)/2 - (exp(t*1i)*1i)/2]
[ - (exp(-t*1i)*1i)/2 + (exp(t*1i)*1i)/2,
            exp(-t*1i)/2 + exp(t*1i)/2]

Можно упростить это использование выражения simplify:

G = simplify(G)
G = 
[  cos(t), sin(t)]
[ -sin(t), cos(t)]

Затем команда

g = eig(G)

производит

g =
 cos(t) - sin(t)*1i
 cos(t) + sin(t)*1i

Можно переписать g в терминах экспонент:

g = rewrite(g, 'exp')
g = 
 exp(-t*1i)
  exp(t*1i)