Символические собственные значения квадратной матрицы 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
Символические выражения закрытой формы для собственных значений возможны только, когда характеристический полином может быть выражен как продукт рациональных полиномов степени четыре или меньше. Матрица Россера является классической тестовой матрицей численного анализа, которая иллюстрирует это требование. Оператор
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 и двойной корень на 1000. Другие четыре корня получают из оставшихся квадратиков. Использовать
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)
Матрица Россера не является типичным примером; редкость, когда полная матрица 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
сам. То есть характеристический полином не может быть факторизирован по рациональам.
Для этой измененной матрицы Россера
F = eig(S)
возвраты
F = -1020.053214255892 -0.17053529728769 0.2180398054830161 999.9469178604428 1000.120698293384 1019.524355263202 1019.993550129163 1020.420188201505
Заметьте, что эти значения близки к собственным значениям исходной матрицы Россера.
Также возможно попытаться вычислить собственные значения символьных матриц, но решения замкнутой формы встречаются редко. Преобразование Гивенса сгенерировано как матричная экспоненциальная элементарная матрица
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)