Почему Научная библиотека GNU не разрешает использовать матрицы с большим количеством столбцов, чем строк, для разложения по сингулярным значениям?

MATLAB позволяет использовать матрицу с большим количеством столбцов, чем строк, при вычислении разложения по сингулярным числам.

>> a_matrix = [1.0, 0.0, 0.0, 0.0, 2.0;
     0.0, 0.0, 3.0, 0.0, 0.0;
     0.0, 0.0, 0.0, 0.0, 0.0;
     0.0, 2.0, 0.0, 0.0, 0.0]

a_matrix =

     1     0     0     0     2
     0     0     3     0     0
     0     0     0     0     0
     0     2     0     0     0

>> [u, s, v] = svd(a_matrix)

u =

     0    -1     0     0
    -1     0     0     0
     0     0     0    -1
     0     0    -1     0


s =

    3.0000         0         0         0         0
         0    2.2361         0         0         0
         0         0    2.0000         0         0
         0         0         0         0         0


v =

         0   -0.4472         0         0   -0.8944
         0         0   -1.0000         0         0
   -1.0000         0         0         0         0
         0         0         0    1.0000         0
         0   -0.8944         0         0    0.4472

Но в Научной библиотеке GNU (GSL) этого нет. Это дает эту ошибку:

gsl: svd.c:61: ERROR: svd of MxN matrix, M<N, is not implemented
Default GSL error handler invoked.

Является ли это недостатком GSL или его можно обойти?


person Paul Reiners    schedule 01.03.2021    source источник
comment
Разве вы не можете транспонировать ввод, а затем транспонировать s и поменять местами u и v?   -  person Luis Mendo    schedule 01.03.2021
comment
Ответ, вероятно, в том, что разработчики были ленивы...   -  person Marco Bonelli    schedule 01.03.2021
comment
Относительно моего предыдущего комментария: вы должны применить комплексно-сопряженную транспонирование (а не просто транспонирование), если вы имеете дело со сложным вводом   -  person Luis Mendo    schedule 01.03.2021
comment
Рабочее решение предложено выше, что касается остальной части вашего вопроса и комментария @MarcoBonelli, у меня есть несколько слов. Есть буквально только один человек, который разрабатывает и поддерживает библиотеку, несмотря на то, что у него есть работа на полный рабочий день, и если вы все еще думаете, что он ленив и/или пакет нуждается в доработке даже после этого, вы всегда можете отправить патч или сообщить об ошибке. запрос функции.   -  person Bracula    schedule 03.03.2021
comment
@LuisMendo, вы должны добавить больше текста/кода в свой комментарий и опубликовать его как отдельный ответ, так как это рабочее решение.   -  person Bracula    schedule 03.03.2021
comment
@ Бракула Спасибо. Я лучше подожду, пока Пол подтвердит, работает ли это для него. Я не использую GSL, поэтому не могу проверить   -  person Luis Mendo    schedule 03.03.2021