我需要算法来计算矩阵 M 的 smith 范式。通常它被描述为M = USV
,参见例如WP 上的 SNF,其中我的矩阵总是满秩的,即det(S) ~= 0
。
我从 Mathematica 开始,一个不错的包提供了这个算法。虽然有一些实现,例如this one,this one by Gilbert或this one using maple,但我无权访问 maple (我认为),其他两种实现要么不计算矩阵U
,V
要么计算错误(尝试[5,0;0,5]
在第二个实现中,其中U
应该V
只是单位矩阵)
那么还有其他可用的实现吗?
也许遵循这个 Mathematica 包的方法(当然在 MatLab 中类似),因为这对我的需要非常有效(使用 Mathematica 时),但只要正确提供U
并且V
我不介意。