用秩的定义求矩阵的秩
#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)简述矩阵的秩和向量组的秩的定义:(2)从定义出发分析两者之间的相互关系. (1)简述矩阵的秩和向量组的秩的定义: 矩阵的秩的定义:设在矩阵A中有一个不为0的r阶子式D,且所有的r+1阶子式(若存 ...
- c++求矩阵的秩_Matlab:矩阵的秩,简化梯形矩阵和线性方程组
点击上方蓝字关注 无距书乡 获取持续更新 在开始今天的正式内容之前,先补充一个创建矩阵的方法--由向量组合成矩阵.A=[1;2;3],B=A+3,C=B+3,A, B, C 均为列向量,矩阵D由向量A ...
- 详解,python求矩阵的秩,你肯定能看懂
在 Python 中,可以使用 NumPy 库求矩阵的秩. NumPy 库提供了 numpy.linalg.matrix_rank() 函数,该函数可以计算矩阵的秩. 求矩阵的秩知识点目录 Pytho ...
- 如何用Matlab求矩阵的秩、乘积、逆、行列式的值、转置
https://jingyan.baidu.com/article/a65957f495b3ab24e67f9bc2.html 如何用Matlab求矩阵的秩.乘积.逆.行列式的值.转置_Tracy_L ...
- MATLAB常见矩阵运算函数,矩阵的转置transpose()、求行列式值det()、求矩阵的秩rank()、求矩阵的特征值eig()、求逆矩阵inv()
MATLAB常见矩阵运算函数 1.转置 如矩阵A 转置后 2.求行列式的值det(A) 使用此函数必须保证A为方阵 3.求矩阵的秩 4.求方阵的特征值 5.求方阵的逆矩阵
- java里创建一个长方形类_定义一个长方形类,定义 求周长和面积的方法实例
/* 定义一个长方形类,定义 求周长和面积的方法, 然后定义一个测试了Test2,进行测试. 长方形的类: 成员变量: 长,宽 成员方法: 求周长:(长+宽)*2; 求面积:长*宽 注意: impor ...
- 定义一个长方形类,定义 求周长和面积的方法,然后定义一个测试了Test,进行测试
定义一个长方形类,定义 求周长和面积的方法,然后定义一个测试了Test,进行测试. import java.util.Scanner; class ChangFangXing{private int ...
- 定义一个长方形类,定义 求周长和面积的方法,然后定义一个测试了Test2,进行测试
/* 定义一个长方形类,定义 求周长和面积的方法, 然后定义一个测试了Test2,进行测试. 长方形的类: 成员变量: 长,宽 成员方法: 求周长:(长+宽)*2; 求面积:长*宽 注意: impor ...
- Matlab 中 rank() 函数的用法—求矩阵的秩
>> a=round(rand(5)) a = 1 0 0 0 1 1 0 1 0 0 0 1 ...
最新文章
- Literal的使用和作用
- 产品经理 - 学习书籍
- electron开发
- MATLAB | 解决打开延迟的情况
- mysql增量备份及恢复解决方案
- mysql 删除数据 分页_PHP实现对mysql数据库内容分页显示
- HtmlAgilityPack.dll的使用 获取HTMLid
- OpenCV关于隐马尔科夫模型的结构和函数
- html读写txt文件,JS读写文本文件示例代码
- Windows美化方案,个性不光是壁纸!
- IDEA启动报错:Error launching IDEA if you already have a 64-bit JDK installed,define a JAVA_HOME
- IPMI 服务器远程管理方法
- 无法连接数据库2003-cant connect to Mysql server on ‘localhost’(10038)
- linux-- input子系统分析
- 摸索着的坚持!!!!2015年9月29日13:14
- 极客日报:阿里回应1000万成立“元境生生”;马斯克一年上了75次热搜;微软.NET中文官网正式上线
- 前端web:响应式Web开发优缺点总结
- 使用飞桨PaddleHub实现将视频动作转化为皮影戏
- Excel数据透视表经典教程六《报表布局》
- QT5.14.2 官方例子 - Qt Widgets 7: Group Box(组合框)