# 1.概述
《离散数学》中的关系和映射应用非常广泛。从面向对象的角度来看,关系和映射都是对象;并且映射是一种特殊的关系。用 Java 这个面向对象的编程语言去实现离散数学中的关系和映射是较为合适的,因此,该系统在此基础上被编写出来。
该系统采用关系作为对象,关系矩阵是关系对象的成员,用关系矩阵来进行各种运算操作,编程者能更好的进行代码实现,操作者也能更加容易去上手。
该系统使用的语言是 Java,测试环境是 Windows10 操作系统、jdk 版本是 1.8.8_221,用 eclipse 编写代码。已实现的功能有:关系判断,关系运算,闭包运算,以及编写了关系类、相容关系类等五个类。
上述功能除映射类和等价关系类有部分功能没有完成,其余功能均实现且测试多次后未发现错误。
# 2.程序概要设计
## 程序流程图
![](https://www.writebug.com/myres/static/uploads/2021/11/7/bd3d2fd8e7481d5683ecc439e4a84c22.writebug)
## 功能模块图
![](https://www.writebug.com/myres/static/uploads/2021/11/7/2ba7d7d4e41dfd87d170542c077fba12.writebug)
## 程序文件结构设计
根据题意,程序编写了六个类,分别是二元关系类、等价关系类、偏序关系类、相容关系类、映射类和主类。其中二元关系类里编写关系判断、关系运算、闭包运算三种方法,等价关系类、偏序关系类、相容关系类、映射类分别继承二元关系类;主类主要编写 GUI 界面设计代码。
# 3.程序详细设计
```java
public String toString() {
StringBuffer str = new StringBuffer();
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix.length; j++) {
str.append(matrix[i][j] == 1 ? 1 + " " : 0 + " ");
}
str.append("\n");
}
return str.toString();
}
```
重写(override)toString() 方法,内容改写成把对象的矩阵(matrix)成员变量的输出。调用关系运算和闭包运算的时候,结果是矩阵,重写toString() 方法之后能很方便地输出运算结果。
```java
public static BinaryRelation union(BinaryRelation r1, BinaryRelation r2) {...};//交集运算
public static BinaryRelation reflexiveClosure(BinaryRelation r1) {...};//自反闭包
```
关系对象其中一个成员变量关系矩阵,实际上关系矩阵是关系的具体表现形式,关系矩阵具有的是自反性等五个性质,而关系运算和闭包运算是关系矩阵之间的通信,将关系运算方法和闭包运算方法设置为静态方法,一是因为两种运算方法的结果均不是关系对象具有的属性,而每个关系对象都可以调用这两种方法,二是方便调用 toString() 方法进行输出。
```java
for (int k = 0; k < r2.matrix.length; k++) {
for (int i = 0; i < r2.matrix.length; i++) {
for (int j = 0; j < r2.matrix.length; j++) {
if (r2.matrix[i][j] != 1)
r2.matrix[i][j] = r2.matrix[i][k] & r2.matrix[k][j];
}
}
}
```
Warshall 算法是求传递闭包的经典算法,在通信网络、运输路线等应用广泛。使用 n 阶关系矩阵 ![](https://www.writebug.com/myres/static/uploads/2021/11/7/4f07ea9db4dfaef811b4f4bc753019d7.writebug) 来表示有向图中任意一对节点是否含有路径的信息,则一条路可以表示为![](https://www.writebug.com/myres/static/uploads/2021/11/7/8160e07adb49c275d878542bca5e7fe6.writebug) ,![](https://www.writebug.com/myres/static/uploads/2021/11/7/0b8ddd16e445707e8fb9eb3e310799e1.writebug)表示包含前 k 个节点。根据描述可得代码:
r2.matrix[i][j]=r2.matrix[i][j]|(r2.matrix[i][k]&r2.matrix[k][j]);
经过算法运算后可得:
**r2.matrix[i][j] = r2.matrix[i][k] & r2.matrix[k][j];**
# 4.程序测试
## 用户界面
![](https://www.writebug.com/myres/static/uploads/2021/11/7/c1a4592670226cdf507afd126cc08b77.writebug)
## 确认两个矩阵
![](https://www.writebug.com/myres/static/uploads/2021/11/7/f803358baa119c705e3a2b4ae43a356d.writebug)
## 操作演示
![](https://www.writebug.com/myres/static/uploads/2021/11/7/d895980f7885859a1c3c1cb5ae6fa876.writebug)![](https://www.writebug.com/myres/static/uploads/2021/11/7/35128d3f5038bc8ebcba5c34b7cfc5f7.writebug)![](https://www.writebug.com/myres/static/uploads/2021/11/7/f71f9f400e9985f8e1a69c2fe784d844.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/11/7/6551bac26bb0f9f636017e56733403cd.writebug)![](https://www.writebug.com/myres/static/uploads/2021/11/7/3a7082591fc23e609b6d68a2322dcac2.writebug)
# 5.小结
该程序使用关系矩阵作为各种关系运算操作的基本单位,关系矩阵本身是 n 阶方阵,代码实现起来相对容易一些。
在做映射类的时候,我遇到用矩阵实现映射的难题:如果用 n 阶方阵描述映射,就会出现描述不够准确的问题;如果用 m*n 阶矩阵描述映射,描述才是最准确的,但是操作起来相较前者就会麻烦很多。在编写代码的时候,我选择沿用 n 阶方阵,方阵作为基本单位既可以进行关系运算操作,也不用单独为映射定义 m*n阶矩阵。
通过这次大作业,我相当于复习了离散数学和线性代数,同时也巩固 java的知识,对java面向对象的特性有了更进一步的了解。GUI 界面有一部分代码类似 Android 界面代码,这相当于让我提前预习 Android 的知识,让我后续学习 Android 更加轻松。
总的来说,完成这次大作业,不仅提升了我的代码编写能力,还提升了我独立完成项目的能力,收获颇丰。
# 6.参考目录
| [1]买买吐送·尼扎木丁.关于二元关系[J].和田师范专科学校学报,2009,28(02):219-220. |
| ------------------------------------------------------------ |
| [2]杨思春,王小林.二元关系传递性研究[J].微机发展,2003(10):88-89. |
| [3]王礼萍,李玉环.二元关系与划分[J].黑龙江水专学报,1998(02):102-104. |
神仙别闹
- 粉丝: 4303
- 资源: 7532
最新资源
- Java基于springboot的上课考勤系统源码+说明文档.zip文件
- 直流电机双闭环调速(p1-p2) 永磁同步电机电流滞环闭环调速(p3-p4) 永磁同步电机电流滞环与SVPWM调速对比(p5-p6) 异步电机滞环电流调速(p7-p8)
- Simulink仿真:基于SOC阈值控制策略的电池均衡(组内+组间) 参考文献:视频讲解 仿真平台:MATLAB Simulink 主要内容:利用boost-buck电路对6块电池进行组内均衡和组间均
- 软件项目+验收材料+编码方案
- 基于二阶自抗扰ADRC的轨迹跟踪控制,对车辆的不确定性和外界干扰具有一定抗干扰性,跟踪轨迹为双移线 有对应复现资料
- 基于滑膜控制smc的3辆协同自适应巡航控制,上层滑膜控制器产生期望加速度,下层通过油门和刹车控制车速,实现自适应巡航控制 个人觉得从结果图中看出基于滑膜控制的效果非常好,不亚于模型预测控制mpc
- Delphi 12 控件之DOCXReadWrite D11 D12
- 基于滑膜控制的后轮主动(ARS)和DYC的协调稳定性控制,上层根据模糊控制规则和滑膜控制产生期望后轮转角ARS和附加横摆力矩Mz,下层采用基于附着系数和车速对附加横摆力矩进行分配,控制效果良好,能实现
- Delphi 12 控件之Delphi in Depth - FireDAC.rar
- 基于微信小程序的校园互助系统源码+数据库.zip文件
- 四旋翼ADRC控制器仿真,已调好 已经生成C语言了,要放到单片机运行的伙伴可以拿去研究
- 毕业设计-基于Java+微信小程序的校园互助系统源码+数据库.zip文件
- 基于二次规划(QP)的路径规划和速度规划 matlab代码实现 + 详细文档 picewise jerk path picewise jerk speed 更新: c++版本已完成,qt可视化
- yolo+安全帽数据集+目标检测+机器视觉识别+6000张图片安全帽识别数据集
- 我的资料1234567890822368
- 毕业设计-基于Java+SpringBoot的校园互助系统微信小程序源码+数据库.zip文件
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈