собственные векторы, когда A-lx сингулярна без решения - PullRequest
0 голосов
/ 08 августа 2010

Как R может найти собственные векторы для следующей матрицы?Собственные значения равны 2,2, поэтому собственные векторы требуют решения solve(matrix(c(0,1,0,0),2,2)), которое является сингулярной матрицей без решения.

> eigen(matrix(c(2,1,0,2),2,2))
$values
[1] 2 2
$vectors
[,1]          [,2] 
[1,]    0  4.440892e-16
[2,]    1 -1.000000e+00

> solve(matrix(c(0,1,0,0),2,2))
Error in solve.default(matrix(c(0, 1, 0, 0), 2, 2)) : 
Lapack routine dgesv: system is exactly singular

Обе процедуры по сути делают одно и то же.Они находят x таким, что (A-lambda<em>I)x = 0, не находя обратного A-lambda</em>I.Ясно, что (0 1) - это решение, но как я не могу понять, почему решение не пришло с ним и как я могу решить его вручную.

Ответы [ 3 ]

1 голос
/ 08 августа 2010

Вы попросили собственное разложение, вы получили собственное разложение.

Если бы вы запросили rcond(), номер условия матрицы или kappa(), вы бы получили соответствующий ответ.

Для вашего второго примера:

> mat <- matrix(c(0,1,0,0), 2, 2)
> kappa(mat)
[1] Inf
> 
> rcond(mat)
[1] 0
>

Для вашего первого примера на самом деле проблем нет:

> mat <- matrix(c(2,1,0,2), 2, 2)
> kappa(mat)
[1] 1.772727
> 
> rcond(mat)
[1] 0.5714286
> 
> 

См., Например, этот предыдущий вопрос по SO для получения дополнительной информации.

0 голосов
/ 08 августа 2010

Они не делают то же самое. Просто взгляните на ссылку в Википедии. И посмотрите в коде dgeev.f, и вы увидите, что простое решение (A-лямбда * I) x = 0 не выполняется.

0 голосов
/ 08 августа 2010

Может быть, он использует один из перечисленных здесь алгоритмов:

http://en.wikipedia.org/wiki/List_of_numerical_analysis_topics#Eigenvalue_algorithms

?

Согласно http://stat.ethz.ch/R-manual/R-devel/library/base/html/eigen.html, eigen, похоже, используетПодпрограмма LAPACK в http://netlib.org/lapack/double/dgeev.f (если у вас квадратная матрица, которая не является симметричной).

Примечание: вы правы, что A - lambda * I - единственное число, если лямбда является собственным значением, но дляДля собственных векторов нужно инвертировать A - lambda * I или решить уравнение y = (A - lambda * I) * x (где y не является нулевым вектором).Достаточно найти ненулевые векторы x, которые удовлетворяют

(A - lambda * I) * x = 0

Одна стратегия состоит в том, чтобы найти неособую матрицу преобразования T такую, что (A - lambda * I) * T являетсяверхняя треугольная матрица (т.е. все элементы ниже диагонали равны нулю).Поскольку A-lambda*I является единственным, T может быть построен так, что последний элемент на диагонали (или даже больше диагональных элементов, если кратность собственного значения больше единицы) равен нулю.

Вектор z, который only имеет последний элемент, равный ненулевому значению (то есть z = (0,....,0,1)), тогда даст нулевой вектор при умножении на (A-lambda *I) * T.Итак, каждый имеет:

0 = ((A - lambda * I) * T) * z

или другими словами, T*z является собственным вектором A.

...