Мне нужен алгоритм для вычисления нормальной формы кузнеца матрицы 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
обеспечиваются правильно, я не против.
Любая причина, по которой вы хотите перейти от Mathematica к Matlab? – Schorsch
Просто любопытство и лучшее сравнение с другим алгоритмом, который я получил от колледжа (который касается темы полностью, но может быть применен к подобным данным) - поэтому я хотел бы сравнить мой с его - в MatLab :) – Ronny
У вас есть доступ к символическому набору инструментов математики в Matlab? Он имеет реализацию ['' Смит-Нормальная форма'] (http://www.mathworks.com/help/symbolic/mupad_ref/linalg-smithform.html), хотя в документации не упоминается 'U' и' V '. – Schorsch