文档介绍:大连民族学院计算机科学与工程学院实验报告实验题目::离散数学实验类型:□演示性□验证性□操作性□设计性R综合性专业:软件工程班级:132班学生姓名:黄正勤学号:2013082204实验日期:2014年11月22日—12月15日实验地点:金石滩校区机房实验学时:16学时实验成绩:指导教师:焉德军姜楠 二元关系(一)实验题目对给定表示有穷集上关系的矩阵,确定这个关系是否是自反的或反自反的;对称的或反对称的;是否传递的。实验原理从给定的关系矩阵来断判关系R是否为自反是很容易的。若flay(R的关系矩阵)的主对角线元素均为1,则R是自反关系;若flay(R的关系矩阵)的主对角线元素均为0,则R是反自反关系;若flay(R的关系矩阵)的主对角线元素既有1又有0,则R既不是自反关系也不是反自反关系。而对于对称性,只需要判断矩阵所有的flay[i][j]与其对应的flay[j][i]是否都相等;若全部相等,则为对称;否则反之。对于传递性,则需要利用线性代数的方法求出R的关系矩阵的平方矩阵,只需验证所有的flag[i][j](R的关系矩阵的平方矩阵)等于1的地方,在flay[i][j](R的关系矩阵)等于1,则具有传递性;否则反之。实验的步骤及实验记录 011 (1)先输入一个整数,表示矩阵的阶数。接着输入矩阵,这里以输入矩阵001 000例,在根据矩阵左上到右下的flay[i][i]的值是否为1判断矩阵是否自反或反自反,判断矩阵是否自反或反自反的代码如下:for(i=0;i<a;i++) { for(j=0;j<a;j++) { if(i==j) { if(flay[i][j]==1) count_1++; elseif(flay[i][j]==0) count_2++; } } if(count_1==a) cout<<" 自反"<<endl; elseif(count_2==a) cout<<" 反自反"<<endl;输入矩阵后输出的实验结果如下:(2)判断对称的或反对称只需要flay[i][j]是否与flay[j][i]相等;若全部相等,则为可对称;否则反之。代码如下:for(i=0;i<a;i++) { for(j=0;j<a;j++) { if(flay[i][j]==flay[j][i]) count_1++; else { count_2=1; break; } } if(count_1==a*a) cout<<" 对称性"<<endl; elseif(count_2==1) { cout<<" 反对称"<<endl; break; } } 运行结果如下:而对于判别是否具有传递性,则相对前面两个性质来说比较复杂,关键是求出原矩阵flay的平方矩阵flag,这里通过线性代数的方法求出flay矩阵的平方矩阵flag,求平方矩阵的方法是:第一个矩阵flay[i][j]等于flay[i][j]乘以第二个矩阵的第j列之总和;j++完后再i++,以后便可求出平方矩阵。然后在比较在平方矩阵flag[i][j]为1的位置,在原矩阵flay[i][j]中是否都为1;若flag矩阵中所有的为1的地方,在flay中都为1,则具有传递性;否则反之;最后输出该平方矩阵。代码如下所示:intk;for(i=0;i<a;i++){for(j=0;j<a;j++) { flag[i][j]=0; for(k=0;k<a;k++) flag[i][j]=flag[i][j]+flay[i][k]*flay[k][j]; } if(flag[i][j]==1) count_2++;} for(i=0;i<a;i++) { for(j=0;j<a;j++) { if(flag[i][j]==1&&flay[i][j]==1) count_3++; elseif(flag[i][j]==1&&flay[i][j]==0) { count_1=1; break; } } if(count_1==1) break; } if(count_2==count_3&&count_2!=0&&count_3!=0) cout<<" 传递性"<<endl; else cout<<" 非传递性"<<endl; cout<<"该矩阵的平方为:"<<endl; for(i=0;i<a;i++) { for(k=0;k<a;k++) cout<<flag[i][k]<<""; cout<<"\b"<<endl; }运行结果如下:以上便是对自反或反自反,对称或反对称,是否传递等性质的判断过程,代码及运行代码的结果。实验总结此题为验证性题目,验证性题目主要是通过其原理以及相关的概念来证明。通过此题对验证性题目的分析有很大的提高。(二)实验题目判断一个二元关系是