APP下载

“数值分析”课程中稀疏矩阵理论的教学策略

2020-07-17华,罗

韶关学院学报 2020年6期
关键词:运算符数值分析迭代法

郑 华,罗 亮

(韶关学院 数学与统计学院, 广东 韶关 512005)

随着信息技术的不断革新和发展,大数据技术已经逐步渗透到实际应用的各个行业和业务职能领域,逐渐成为重要的生产要素,如何更好地运用海量数据,决定了新一轮生产率增长和消费者激增浪潮的到来.大数据背景下的信息技术需要良好的科学计算能力作为基础,这对高校相关专业的人才培养提出了新的要求,特别是对与之关联紧密的信息与计算科学专业核心课程进行改革创新.“数值分析”是信息与计算科学专业最核心的专业必修课,该课程关注怎样用计算机求解各类数学模型转换得到的数学问题, 并作相关的算法分析.

1 “数值分析”教学概况

“数值分析”课程分为数值代数、数值逼近和微分方程数值解3 个模块, 其中数值代数部分主要关注实际数学模型离散化得到的线性方程组和特征值计算的数值算法. 很多大数据应用问题,比如微分方程的有限差分离散化[1]、网页排序问题[2-3]、复杂关系网络问题[4]等,往往会转化为大规模稀疏矩阵的处理,在目前的一些常见的《数值分析》教材[5-6]中,对稀疏矩阵理论包括与之匹配的上机实验的讨论较少,如果在教学过程中能设计有针对性的教学环节,就能更好地帮助学生理解和掌握相关的数值算法理论.

针对“数值分析”课程中与大规模稀疏矩阵相关的线性方程组求解和特征值计算两部分内容,本文给出了稀疏矩阵理论的教学策略,完成相关章节教学目标的同时,使相关内容的教学更具有针对性,以适应大数据时代的需要.

2 稀疏矩阵教学策略

如果一个矩阵的非零元较少,并且排列没有规律,则称它为稀疏矩阵.在各类数值算法的计算机实现中,对于稀疏矩阵的存储,尤其是矩阵阶数比较大的情形,如果采用常规矩阵的存储方式,那将会占用大量的计算机内存,导致上机实验的结果出现不准确,甚至计算机的运行出现内存溢出.因此,对待稀疏矩阵一般采用的是三元数组存储的方法,只存储非零元及其位置信息.另一方面,为了使矩阵在运算过程中保持其稀疏结构不被破坏,还要尽量避免矩阵乘矩阵和矩阵求逆的运算.这些算法实现的基本准则,在“数值分析”的算法理论教学中一般较少涉及.接下来按数值代数中线性方程组求解和特征值计算两部分内容,分别给出针对性的稀疏矩阵教学策略.

2.1 求解线性方程组的直接法

对于求解线性方程组直接法部分的教学内容,是基于Gauss 消去法展开的,包括考虑减少小主元影响所得的主元素Gauss 消去法、对称正定矩阵情形的平方根法和三对角矩阵情形的追赶法.由于直接法的本质是基于矩阵初等变换进行的,理论上等价于相应的矩阵分解(如LU 分解、Cholesky 分解等),因此,各类直接法在计算机实现中不可避免地会出现矩阵乘矩阵的运算,对于本科阶段的数值分析学习要求来说,直接法破坏了矩阵的稀疏结构,是不适用于大规模稀疏矩阵的.因此,在教学过程中,先按照“数值分析”课程教学要求完成常规的教学内容,上机实验所涉及的矩阵都采用小规模矩阵进行,让学生先掌握各类直接法的算法思想和算法流程.在阶段总结过后,再引入稀疏矩阵的概念,并以随机生成的稀疏矩阵为例,向学生展示直接法应用过程中遇到的内存溢出、计算时间过长等麻烦,展示直接法的缺点,为后续求解线性方程组的迭代法的引入做好铺垫.

在线性方程组求解的实验教学过程中,如果采用MATLAB 进行,学生可能会使用“”运算符[7].由于MATLAB 的“”运算符所调用的mldivide 函数的内置算法涉及到了SuperLU 软件包[8],对于大规模稀疏矩阵(尤其是具有一定结构的稀疏矩阵)同样适用,这容易让学生对前期的理论讲解感到困惑.

表1 展示了用“”运算符求解不同类别系数矩阵例子的效果对比.对于矩阵A(稠密),随着矩阵阶数的提升,计算时间和内存明显增加;对于不具有任何结构的矩阵B(稀疏),虽然存成稀疏方式后可以明显节省内存,但由于矩阵阶数更大,所耗费的计算时间比例1 更多;对于矩阵C(三对角),使用“”运算符的效果就得到了明显的提升,可求解的矩阵阶数可达到千万级.

表1 “”运算符的效果对比

结合这样计算实例,可结合本章主要知识点给学生进行说明.和矩阵A 相比较,对矩阵B 的计算时间没有减少,说明“”运算符本质上是直接法,而对矩阵C 的计算效率明显,说明了“”运算符的内置代码有其特殊性,进而对SuperLU 软件包做个简单介绍,强调这是在后续数值代数研究中会遇到的问题,本科教学阶段暂时不去涉及,一方面可以打消学生可能产生的疑惑,另一方面也为部分学生今后可能从事的相关研究培养兴趣.

2.2 求解线性方程组的迭代法

求解线性方程组的迭代法,是专门针对大规模稀疏矩阵设计的,这部分算法迭代格式的构造主要包括两类方式:一类是基于矩阵分裂进行的,包括经典的Jacobi 迭代、Gauss-Seidel 迭代和SOR 迭代;另一类是基于子空间迭代理论进行的,比如共轭梯度法.这类算法的特点是每一步迭代只涉及矩阵乘向量的运算,不会破坏矩阵的稀疏结构,适用于大规模稀疏矩阵.对于该部分内容的教学,在讲解完各算法的基本思想和流程后,上机实验的实例都充分利用大型稀疏矩阵,具体的实例生成可以采用随机生成和特殊生成的方式进行.算法的实现过程不但关注各类迭代法的实现,同时注意跟直接法进行对比,展示算法运行的计算时间,使学生更好地理解迭代法的优势所在.

在实验教学中,由于MATLAB 内置了大量的稀疏矩阵操作函数,这为迭代法的算法实现提供了极大便利.为了便于实验教学的展开,在迭代法实现的上机实验之前,需设置MATLAB 稀疏矩阵相关函数的调用任务,主要包括sparse、full、nzz、spy、sprand、spdiags 等.同时,考虑到教学课时的限制,这些函数的学习和使用只要求学生掌握最基本的调用方式,如表2 所示.

表2 MATLAB 稀疏矩阵常见函数教学要点

2.3 特征值计算

特征值计算包含两个数学问题:一是求大规模稀疏矩阵的某个特征值和对应特征向量,二是求解小型稠密矩阵的全部特征值.

对于第一个数学问题,涉及幂法和反幂法.根据大规模稀疏矩阵运算的需要,幂法格式的构造需要避免矩阵乘幂,以矩阵乘向量的迭代格式进行,《数值分析》教材对此的讲解较少,如果学生直接认同教材最终给出的幂法迭代格式,就容易忽略幂法中矩阵乘幂的本质.因此,在幂法格式构造的课堂教学中,务必向学生演示直接做矩阵乘幂和以迭代格式进行的区别,加深学生对“理论上等价,数值上未必等价”这个课程理念的理解.

在实验教学过程中,借助来源于实际应用的超大规模稀疏矩阵,比如从University of Florida Sparse Matrix Collection (https://sparse.tamu.edu/)中获取的Web 矩阵,紧密结合实际应用的实验教学任务,能更好地让学生明确所学知识的应用价值.对于反幂法的教学,由于该算法的本质是对矩阵的逆应用幂法,因此迭代格式的引入是简单并且自然的.到了反幂法的算法实现环节,明显出现了矩阵求逆运算,此处正好符合针对稀疏矩阵应尽量避免矩阵求逆的准则应用,所以在反幂法的最终格式构造上,也是稀疏矩阵理论引入的一个切入点.

对于第二个数学问题,涉及的主要算法是QR 方法,算法细节包括利用Householder 变换对矩阵进行QR 分解以及把矩阵通过正交相似变换化为Hessenberg 矩阵.由于教材上对QR 方法的介绍明确指出该方法只适用于小型稠密矩阵,容易让学生认为上述相关理论都不适用于大规模稀疏矩阵.由于细节操作中的Householder 变换是可以通过数学公式变形避免矩阵乘矩阵的运算,因此在QR 方法准备知识的讲解中,要给学生做大规模稀疏矩阵的课堂实验演示,让学生掌握这个经典正交变换算法的优势.例如,设H =I-2wwT是初等反射阵,在进行Householder 变换时,算法过程的基本操作是矩阵向量乘,即Hx.这种简单的表达式很容易让学生在进行算法实现时把MATLAB 代码写成:

上述代码对于小规模矩阵并没有很明显的缺陷,但一旦涉及大规模矩阵的情形,w*w’的操作显然形成了大规模的稠密矩阵,会造成内存溢出.因此,需要根据稀疏矩阵的运算规则,修改代码来避免存储初等反射阵,即:

显然,新的代码避免了大规模稠密矩阵的生成.

另一方面,对于最终的QR 方法迭代格式,由于其中的步骤涉及了把矩阵进行QR 分解后再反转相乘的操作,导致了该算法不适用于大规模稀疏矩阵,这是需要对学生强调的要点.除了课程知识的讲解,还可以结合实际应用给学生做简单的介绍,对于大规模稀疏矩阵,一般在应用中也不需要去求解全部特征值,从应用的角度帮助学生肯定QR 方法的价值.

3 小结

基于“数值分析”的课程标准,在不影响课程本身教学目标的基础上,给出了稀疏矩阵理论在关联知识中的教学策略.所提出的教学策略可以总结为:以巩固算法理论为基础、以应用为导向和以实验教学为辅助.该教学策略可以推广到其他应用型数学专业课的教学中.

猜你喜欢

运算符数值分析迭代法
迭代法求解一类函数方程的再研究
老祖传授基本运算符
H-矩阵线性方程组的一类预条件并行多分裂SOR迭代法
用手机插头的思路学习布尔运算符
多种迭代法适用范围的思考与新型迭代法
压力溶腔对岩溶隧道施工安全影响的数值分析
土与支护结构相互作用及边坡稳定性分析
C语言中自增(自减)运算符的应用与分析
线性系统的预条件GAOR迭代法
C++中运算符的重载应用