Символьные собственные значения квадратной матрицы 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
) совпадает с базисом для ядра, найденным в последнем разделе. Другие два собственных значения являются результатом применения формулы корней квадратного уравнения к который является квадратичным фактором в 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 сгенерировано как матричный экспоненциал элементарной матрицы
Команды 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)