2017-02-01 22 views
1

Я новичок в R и пытался SVD матрицы. Когда я перекрестился с MATLAB, V-матрица SVD показала разные результаты. Есть ли объяснение, которое я пропускаю, или я сделал некоторые ошибки в программировании R. Ниже приведены снимки экрана R и MATLAB. Однако матрица U и D аналогичныРазличные результаты SVD в R и MATLAB

SVD with R

SVD with MATLAB

+0

Проверьте, показывает ли Matlab только 4 десятичных знака (с округлением), но в памяти эти значения имеют двойную точность. Кажется, что в матрице V в R отсутствует последний столбец (вы его захватили?). В целом они кажутся мне одинаковыми. –

+0

Я беспокоюсь о последнем недостающем столбце V –

ответ

2

svd может принять nu и nv аргументов, определяющих размер U и V испускать. Эти значения по умолчанию равны min(# of rows, # of cols), что означает по умолчанию в R SVD - это «тощий» или SVD с экономичным режимом, тогда как Matlab по умолчанию использует полный SVD, если вы не попросите утонченную версию.

Как получить полный текст V: S = svd(M, nu=3, nv=4). В более общем плане, nu=nrow(M) и nv=ncol(M).

Полный пример:

> M = matrix(c(2,3,4,5,1,2,3,4,0,1,2,3), nrow=3, ncol=4) 
> M 
    [,1] [,2] [,3] [,4] 
[1,] 2 5 3 1 
[2,] 3 1 4 2 
[3,] 4 2 0 3 
> S = svd(M, nu=3, nv=4) 
> S$u 
      [,1]  [,2]  [,3] 
[1,] 0.6486710 0.63810301 0.4147897 
[2,] 0.5607706 -0.03225566 -0.8273427 
[3,] 0.5145506 -0.76927506 0.3787527 
> S$d 
[1] 8.790352 3.524115 2.882763 
> S$v 
      [,1]  [,2]  [,3]  [,4] 
[1,] 0.5731120 -0.5384787 -0.04767577 -0.61588176 
[2,] 0.5498331 0.4596073 0.69520488 0.05598925 
[3,] 0.4765560 0.5065914 -0.71632725 0.05598925 
[4,] 0.3769888 -0.4921046 -0.03595079 0.78384952 

В этом случае матч Matlab и R СВД! (В общем, они не должны совпадать, так как любое вращение как U, так и V также является SVD.)

+0

Thanx Ahmed ... U и V не уникальны, поэтому я понимаю ... но мне нужен был полный V ... любая книга для новичков R может предложить (помимо онлайн-справки)? –

+0

Извините, я не изучаю программирование через книги, я просто пишу много кода и читаю много документов. Недавно я начал заниматься Project Euler и еще лучше, Cryptopals Crypto Challenge, чтобы практиковать то, о чем я иначе не знал бы. –

2

В заключение, они одинаковы.

Затем, почему эти матрицы выглядят по-другому?

Вспомните, как SVD разлагает матрицу в UΣV *.

Размеры матриц равны m x m, m x n, n x n соответственно.

Однако Σ является диагональной матрицей, и для представления матрицы требуются только макс (m, n) измерения.

Если это сокращение сделано, то U или V * будут иметь уменьшенные размеры в зависимости от размера m и n. Например, в этом случае Σ можно свести к матрице 3 × 3, а V * будет матрицей 3 × 4.

Наконец, можно спросить, приводит ли это сокращение к потере информации. Но «недостающая часть» матрицы может быть восстановлена ​​из того, что они являются унитарными матрицами.

+0

Почему R пропускает один столбец V? –

+0

Как я упоминал в этом ответе, это сокращение не приводит к потере информации. Почему R выбрал метод сокращения, в то время как MATLAB не стал другим вопросом. Я могу сказать, что он стоит меньше памяти, потому что он, очевидно, экономит меньше данных, но я думаю, это не идеальное объяснение. –

+0

У меня есть итерационный алгоритм, который требует SVD на каждой итерации и выполняет некоторую операцию с V-матрицей. Что мне делать ? снова восстановить V? –

 Смежные вопросы

  • Нет связанных вопросов^_^