2013-06-06 2 views
1

Мне нужен алгоритм для вычисления нормальной формы кузнеца матрицы M. Обычно это описывается как M = USV, см., Например, SNF on WP, где мои матрицы всегда имеют полный ранг, то есть det(S) ~= 0.Смит-форма целочисленной матрицы в MatLab, также предоставляющая матрицы перестановок

Я начал в Mathematica, где хороший пакет предоставляет этот алгоритм. Хотя существуют некоторые реализации вокруг, например, this one, this one by Gilbert или this one using maple, у меня нет доступа к кленовому (я думаю), и обе другие реализации не вычисляют матрицы U и V или не вычисляют их wronly (попробуйте [5,0;0,5] в вторая реализация, где U и V должны быть просто матрицами единиц)

. Есть ли другие варианты реализации?

Возможно, один следующий подход this Mathematica package (конечно, аналогично в MatLab), потому что работал достаточно хорошо для моих потребностей (при работе с Mathematica), но до тех пор, как U и V обеспечиваются правильно, я не против.

+1

Любая причина, по которой вы хотите перейти от Mathematica к Matlab? – Schorsch

+0

Просто любопытство и лучшее сравнение с другим алгоритмом, который я получил от колледжа (который касается темы полностью, но может быть применен к подобным данным) - поэтому я хотел бы сравнить мой с его - в MatLab :) – Ronny

+0

У вас есть доступ к символическому набору инструментов математики в Matlab? Он имеет реализацию ['' Смит-Нормальная форма'] (http://www.mathworks.com/help/symbolic/mupad_ref/linalg-smithform.html), хотя в документации не упоминается 'U' и' V '. – Schorsch

ответ