对称矩阵压缩算法的实现

内容发布更新时间 : 2024/5/20 12:53:26星期一 下面是文章的全部内容请认真阅读。

目 录

1 课题描述................................................................... 1 2 设计要求................................................................... 2

2.1设计要求 ............................................................. 2 2.2各模块程序的伪码算法 ................................................. 2 2.2各模块之间的调用关系图 ............................................... 2 3 模块内的核心算法及流程图 ................................................... 3

3.1构建任意矩阵 ......................................................... 3

3.1.1构建矩阵代码 ................................................... 4 3.2判断矩阵是否对称 ..................................................... 4

3.2.1判断矩阵是否对称代码 ........................................... 6 3.3 对对称矩阵进行压缩存储 ............................................... 6

3.3.1 对对称矩阵进行压缩存储代码 ..................................... 8 3.4 将存储后的矩阵按照数学形式输出 ....................................... 8

3.4.1 将存储后的矩阵按照数学形式输出的代码 .......................... 10

4 详细代码.................................................................. 11 5 程序测试.................................................................. 16

5.1 合法输入 ............................................................ 16

5.1.1 菜单 .......................................................... 16 5.1.2构建任意矩阵 .................................................. 16 5.1.3 成功构建矩阵对其进行判断是否为对称矩阵 ........................ 17 5.1.4 对对称矩阵进行压缩存储 ........................................ 18 5.1.5 按照数学形式输出所压缩的矩阵 .................................. 19 5.1.6 退出程序 ...................................................... 20 5.2 非法输入 ............................................................ 20

5.2.1 非法操作菜单 .................................................. 20 5.2.2 n值的非法输入 ................................................ 21

总结 ....................................................................... 22 参考资料.................................................................... 23

1 课题描述

矩阵是很多科学与工程计算问题中研究的数学对象。在此,人们感兴趣的不是矩阵本身,而是如何存储矩阵的元,从而使矩阵的各种运算能有效的进行。

通常,用高级语言编制程序时,都是用二维数组来存储矩阵元。有的程序设计语言中还提供了各种矩阵运算,用户使用时都很方便,然而,在数值分析中经常出现一些阶数很高的矩阵,同时在矩阵中有许多值相同的元素或者是零元素。有时为了节省存储空间,可以对这类矩阵进行压缩存储。

压缩矩阵:为多个值相同的元止分配一个存储空间;对零元不分配空间。 开发工具:Visual C++6.0

1

2 设计要求

2.1设计要求

本次课程设计采用结构化程序设计方法,从整体到模块、逐步细化,模块化设计、结构化编码的算法只适合特殊矩阵中的对称矩阵,面对一般矩阵,不进行压缩存储。存储时采用的顺序存储结构主要为数组,包括一维数组和二维数组。程序中定义了一个结构体Array s,其成员为两个数组,具体设计过程如下: 2.2各模块程序的伪码算法

(1)构建矩阵:

CreatMatrix(Array &s);

操作结果:创建任意n*n矩阵。 (2)判断矩阵是否对称: JudgeMatrix(Array &s); 初始条件:矩阵M存在。

操作结果:判断M是否为对称矩阵,若不是,则重新构建,最终得到对称矩阵。 (3)压缩存储:

CompMatrix(Array &s);

初始条件:矩阵M为对称矩阵。

操作结果:将M压缩存储到一维数组中。 (4)输出所压缩的对称矩阵: OutputMatrix(Array &s);

初始条件:矩阵M已被压缩存储到一维数组中。 操作结果:将M按照数学形式输出。

2.2各模块之间的调用关系图

各模块之间的调用关系如图2.1所示。 main CreatMatrix JudgeMatrix CompMatrix OutputMatrix CreatMatrix

图2.1 各模块之间的调用关系

2

3 模块内的核心算法及流程图

3.1构建任意矩阵

在构建任意n*n矩阵这个模块中,利用了二维数组来接收所构建矩阵的元。

CreatMatrix()函数:在构建矩阵时,首先要得到n值,将n值带入构建矩阵中,而输入部分用for循环控制输入格式及元素个数,输入前已规定建立任意矩阵并且元素个数为n*n个,接收时以二维数组的形式来存储从键盘输入的任意元素。输出所构建的矩阵时仍用for循环来输出。

输入流程图如图3.1所示,输出流程图如图3.2所示,其中n为行下表或列下标。

开始 开始 输入n值 i=1 行下标初始化为1 n是非零自然数 N 判断非法输入

n<0或者n为字符 判断i值与 Y i<=n 行下标 输入矩阵 系统提示 N n值的关系 i=1 行下标初始化为1 j=1 列下标初始化为1

N i<=n 判断i值与行下标n值的关系 Y j<=n 判断 j值 j=1 列下标初始化为1 N 与列下标 n值的关系 Y j<=n 判断j值与列下标 输出元素 N Y n值的关系 s.M[i][j] Y 存入元素 j++ j++

i++ i++

结束 结束 图3.1输入流程图 图3.2输出流程图

3

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4 ceshi