我以前写过一篇关于计算矩阵的秩的小论文,里面是我的一些看法,我从中摘录了一部分,附在下面,看看对你有没有什么帮助。我的看法也是通过将矩阵化成最简形来求解,以下是这么选择的原因。其实这个问题可以讨论讨论的,当时我对自己的算法也不算很满意,所以有什么问题尽管提。
本程序是为求解矩阵的秩而进行编译的。要说明其功能,首先要明白什么是矩阵的秩。设在矩阵A中有一个不等于0的r结子式D,且所有r+1阶子式(如果存在的话)全等于0,那么D称为矩阵A的最高阶非零子式,数r称为矩阵A的秩,记作R(A)。零矩阵的秩为1。根据定义推断,计算矩阵A的秩,可以转化为计算矩阵A的最大非零子式。但是,实际应用这条原理来解决此问题并不容易。因为,应用计算机计算矩阵A所对应的行列式|A|的值非常麻烦。一个m×n的矩阵,其k阶子式多达m!/[k!•(m-k)!]•n!/[k!•(n-k)!]个,这大大增加了程序的计算量。同时,由于不同阶的子式的值的算法不易通用,故也增加了程序员的编程负担,最重要的是,程序的通用性较低,不易应用于相似题目的求解。故,本程序算法并未采用这种思路。那么,本题又应当如何求解呢?实际生活中,我们一般的求解方法是应用初等变换求解。应用初等变换,将要求的矩阵A变换成行最简形或列最简形然后再进行判断,这才是我们求解矩阵的秩的常规做法。那么,编写程序求解矩阵的秩当然也可以遵循这种做法。相对于前面所讨论的原理来说,应用这种原理进行算法设计,可以减少不少的时间,同时计算机求解的速度也能大大提高。而且,再本算法的基础上稍加改进,即可适应任何阶次的矩阵的秩的求解。