资源描述:
《数学学院创新性实验结题报告书》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、GUILINUNIVERSITYOFELECTRONICTECHNOLOGY数学与计算科学学院创新性实验结题报告书实验题目:矩阵秩的计算方法及其程序实现实验成绩(教师填写):学院:数学与计算科学学院专业:统计学组长姓名(学号):1500720126李双小组成员(学号):1500720126李双1500720103冯珊珊1500720129刘凯文指导教师:段雪峰2016年10月21日一、实验目的及主要创新性点:通过系统学习矩阵秩的理论与数值方法,设计程序求解矩阵的秩,尤其是各种结构矩阵的秩。主耍创新点在于实现
2、各种矩阵秩的计算方法,再把这些方法进行数值比较。查阅资料的时候发现虽然高斯消元法可以实现矩阵的秩的计算,但是高斯消元法只是适用于方阵。所以需要我们自己利用已学的知识设计算法。二、实验要求:1、完成实验报告一份。2、提交实验程序一份。三、实验原理:求矩阵秩有两种常用方法:一种是用初等变换的方法;矩阵求秩是以对矩阵进行行(列)的初等变换至阶梯形,此阶梯形的非零行的数H就是秩的值。另一种是用矩阵的子式的方法。矩阵的最高阶非零子式的阶数就是矩阵的秩。通过矩阵的了式取矩阵的秩时,随着矩阵的行列数增加,需要取到的了式数
3、会成指数式的增长,使程序的复朵度快速上升,效率降低。所以我们采用在数学计算中最常用的初等变换來作为程序的原理。初步算法的设计:1.输入行为叭列数为n的矩阵;2.判断,换行(列),计算,将矩阵化为行阶梯形:先判断all;若all!=0,则用第1行将2,3,...,m行的第1列元索化为0;若al1=0,则判断a21;若a21!=0,则将第1行与第2行元素互换,用第1行将行的第1列元素化为0;若a21=0,则判断a31;•••若ami!=0,则将第1行与第m行元素互换,用第1行将2,3,...,m行的第1列元索化
4、为0;若aml=0,则判断am2;•••若anm!二0,则将第1行与第m行元素互换,用第1行将2,3,...』行的第1列元素化为0;若amn=0,则说明矩阵中所有元素都为0・3.通过行阶梯形计算矩阵的秩•矩阵的秩等于矩阵行阶梯形屮非0行的行数.具体算法与部分相关程序:(i表示行数,j表示列数)由于使用平台是VisualStudio2015,所以输入函数是scanf_s而不是scanf.在vc++上应用时改为scanf便可以1.输入矩阵,和显示矩阵通过两个独立的函数实现;输入矩阵:for(i=1;i<=m;i
5、卄)printf(〃第%(1行:t〃,i);for(j二1;j<=n;j++)scanf_s&cirr[i][j]);printf(,za[%d][%d]=%.31fz,,i,j,arr[i][j]);printf(〃〃);}}输出(显示矩阵):for(i=1;i<=m;i++){for(j=1;j<=n;j++)printf(〃t%・31f〃,arr[i][j]);printf(〃rT);}2.将矩阵转化行阶梯形。代码:intii=l;for(j=l;j<=n;j++){for(i=ii;i
6、<=m;i++){if(a[i][j]==0)continue;else{/*交换矩阵的第i行与第ii行的所有元素*/for(k二1;k<=n;k++){temp=a[i][k];a[i][k]=a[ii][k];a[ii][k]=temp;}}break;}if(i==m+1)continue;/*将第j列元素转化*/for(i=ii+1;i<=m;i++){temp=a[i][j]/a[ii][j];for(k=1;k<=n;k++)a[i][k]=a[i][k]一temp*a[ii][k];print
7、f(,z通过初等行变换矩阵C化为,z);/*输出进行初等行变换的过程*/printf(〃C二〃);for(p二1;p<=m;p++){for(q=1;q〈二n;q++)printf(z,t%.31fz,,a[p][q]);printf(〃〃);}printf(〃〃);}ii++;}3.计算秩并输出。初始化一个临时变量temp,逐行判断是否有非0元素,有则temp口加并转下一行;若无,则下一行。代码:temp=0;for(i=l;i<=m;i++)for(j二1;j<=n;j++){if(a
8、[i][j]!=0){temp++;break;}}printf("矩阵秩为%lfz,,temp);五、实验过程原始记录(数据,图表,计算等):进入程序:DC:llsers75Documents§$jZC®WB^5r1•输入晅阵进行计算I2.出程序希入1或Z输入数字1后:C:Users75Documerns目走义C语言请输入矩阵的行数m(m<10):逐行输入矩阵:••12345行][