#include<iostream>
#include<algorithm>  
using namespace std;
int Reverse(int a[],int N) //求几个数的τ 
{
     int sum=0;
for(int i1=1;i1<N;i1++)
{
    for(int i2=0;i2<i1;i2++)
{
if(a[i2]>a[i1])
sum++;
}
}
return sum;
}

int Numerical(int a[],int arry[],int len)  //a是矩阵中的一个子行列式,该函数可以将子行列式的值求解出来  
{   
    int j, k;  
    int sum=0;
    while (true)  
    {  
        int tao1;
        int lc=1;
   tao1=Reverse(arry,len);
for(int m=0;m<len;m++)
   lc=lc*a[m*len+arry[m]-1];
if(tao1%2==0)
sum+=lc;
else
sum-=lc;
lc=1;
        for (j = len - 2; j >= 0 && arry[j] > arry[j + 1]; j--);//注意此处 j >= 0 判断条件在前  
  
        if (j < 0) break;//结束  
          
        for (k = len - 1; k > j&&arry[k] < arry[j]; k--);  
  
        swap(arry[k], arry[j]);  
  
        for (int l = j + 1, r = len - 1; l < r; l++, r--)  
            swap(arry[l], arry[r]);  
    }  
    return sum;
}  
int min(int a,int b)
{
if(a<=b)
return a;
else
return b;
}
int main()
{
int col,row,N,total,s;
int count=0;
int i=0;
int a[344];
cout<<"请输入矩阵的列数和行数"; 
cin>>col>>row;
int det[row][col];
cout<<"请输入矩阵的所有项";
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
cin>>det[i][j];///从左向右一行一行输入矩阵所有的项 
}
N = min(col,row);
int arry[N];///秩最大也只可能是行和列的小的那个 
for(int p=0;p<N;p++)
arry[p]=p+1;
        while(N>1)
        {
i=0;
for(int z=0;z<=row-N;z++)
{
    for(int x=0;x<=col-N;x++)
{
   for(int y=0;y<N;y++)
   {
    for(int m=0;m<N;m++) ///以上几行求出了这个该矩阵的所有N阶子行列式 
    {
    a[i]=det[z+y][x+m];
    i++;
}m
}y
i=0;
s=Numerical(a,arry,N);
if(s!=0)//一旦该子行列式不等于0,立刻跳出循环,输出当前行列式的阶数,也就是矩阵的秩 
{
goto line1;
   }
for(int p=0;p<N;p++)
arry[p]=p+1;
}x
}z
N--;
  }while 
  line1:
  cout<<"秩为"<<N;

}

用矩阵的秩的定义来求解。而不是进行矩阵的行变换和列变换进行求解。也许用行变换和列变换来求解时间复杂度会小许多。请大家尽情拍砖,给我这个小菜鸡提出宝贵意见,并给出更好的算法

以上就是我编写的源代码,并用多个矩阵实验无误。该算法有缺点,就是时间复杂度过高。

这个程序的难点就是求行列式的值的时候,求n个数的全排列。我用的是字典序的方法,具体思想在百度文库里面有。

经过3个小时的编写,可算弄出啦。看来我coding的能力还得提高

用秩的定义求矩阵的秩相关推荐

  1. 简述矩阵的秩和向量组的秩的定义 从定义出发分析两者之间的相互关系

    (1)简述矩阵的秩和向量组的秩的定义:(2)从定义出发分析两者之间的相互关系. (1)简述矩阵的秩和向量组的秩的定义: 矩阵的秩的定义:设在矩阵A中有一个不为0的r阶子式D,且所有的r+1阶子式(若存 ...

  2. c++求矩阵的秩_Matlab:矩阵的秩,简化梯形矩阵和线性方程组

    点击上方蓝字关注 无距书乡 获取持续更新 在开始今天的正式内容之前,先补充一个创建矩阵的方法--由向量组合成矩阵.A=[1;2;3],B=A+3,C=B+3,A, B, C 均为列向量,矩阵D由向量A ...

  3. 详解,python求矩阵的秩,你肯定能看懂

    在 Python 中,可以使用 NumPy 库求矩阵的秩. NumPy 库提供了 numpy.linalg.matrix_rank() 函数,该函数可以计算矩阵的秩. 求矩阵的秩知识点目录 Pytho ...

  4. 如何用Matlab求矩阵的秩、乘积、逆、行列式的值、转置

    https://jingyan.baidu.com/article/a65957f495b3ab24e67f9bc2.html 如何用Matlab求矩阵的秩.乘积.逆.行列式的值.转置_Tracy_L ...

  5. MATLAB常见矩阵运算函数,矩阵的转置transpose()、求行列式值det()、求矩阵的秩rank()、求矩阵的特征值eig()、求逆矩阵inv()

    MATLAB常见矩阵运算函数 1.转置 如矩阵A 转置后 2.求行列式的值det(A) 使用此函数必须保证A为方阵 3.求矩阵的秩 4.求方阵的特征值 5.求方阵的逆矩阵

  6. java里创建一个长方形类_定义一个长方形类,定义 求周长和面积的方法实例

    /* 定义一个长方形类,定义 求周长和面积的方法, 然后定义一个测试了Test2,进行测试. 长方形的类: 成员变量: 长,宽 成员方法: 求周长:(长+宽)*2; 求面积:长*宽 注意: impor ...

  7. 定义一个长方形类,定义 求周长和面积的方法,然后定义一个测试了Test,进行测试

    定义一个长方形类,定义 求周长和面积的方法,然后定义一个测试了Test,进行测试. import java.util.Scanner; class ChangFangXing{private int ...

  8. 定义一个长方形类,定义 求周长和面积的方法,然后定义一个测试了Test2,进行测试

    /* 定义一个长方形类,定义 求周长和面积的方法, 然后定义一个测试了Test2,进行测试. 长方形的类: 成员变量: 长,宽 成员方法: 求周长:(长+宽)*2; 求面积:长*宽 注意: impor ...

  9. Matlab 中 rank() 函数的用法—求矩阵的秩

    >> a=round(rand(5)) a = 1     0     0     0     1      1     0     1     0     0      0     1 ...

最新文章

  1. Literal的使用和作用
  2. 产品经理 - 学习书籍
  3. electron开发
  4. MATLAB | 解决打开延迟的情况
  5. mysql增量备份及恢复解决方案
  6. mysql 删除数据 分页_PHP实现对mysql数据库内容分页显示
  7. HtmlAgilityPack.dll的使用 获取HTMLid
  8. OpenCV关于隐马尔科夫模型的结构和函数
  9. html读写txt文件,JS读写文本文件示例代码
  10. Windows美化方案,个性不光是壁纸!
  11. IDEA启动报错:Error launching IDEA if you already have a 64-bit JDK installed,define a JAVA_HOME
  12. IPMI 服务器远程管理方法
  13. 无法连接数据库2003-cant connect to Mysql server on ‘localhost’(10038)
  14. linux-- input子系统分析
  15. 摸索着的坚持!!!!2015年9月29日13:14
  16. 极客日报:阿里回应1000万成立“元境生生”;马斯克一年上了75次热搜;微软.NET中文官网正式上线
  17. 前端web:响应式Web开发优缺点总结
  18. 使用飞桨PaddleHub实现将视频动作转化为皮影戏
  19. Excel数据透视表经典教程六《报表布局》
  20. QT5.14.2 官方例子 - Qt Widgets 7: Group Box(组合框)

热门文章

  1. ADB和Fastboot最新版的谷歌官方下载链接
  2. c语言2级成绩时间,二级c语言考试时间
  3. 人力资源案例:薪酬与绩效考核体系建设
  4. 如何使用蓝牙实现OTA固件升级
  5. 「Arm Arch」 ISA 寄存器
  6. VUE element UI 搭建
  7. STM32参考手册、数据手册和编程手册
  8. (FSRCNN)_Accelerating the Super-Resolution Convolutional Neural Network——超分辨率(三)
  9. Spring - 装配bean
  10. access 表合并