行简化阶梯形矩阵的ExcelVBA程序实现
作者: 毛圆洁
摘要:计算行简化阶梯形矩阵贯穿了线性代数的矩阵、向量组的线性相关性、求解线性方程组等多个章节的学习,但是传统教学中,人工计算的方法效率并不高。文章基于Excel软件的VBA程序,设计了将任意矩阵转化成行简化阶梯形矩阵的具体代码,并给出了相关应用举例,能够帮助提升线性代数课程的课堂效率与教学效果。
关键词:Excel;行简化阶梯形矩阵;线性方程组
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2022)24-0060-02
行简化阶梯形矩阵在线性代数中有着重要的作用。将矩阵转化成行阶梯形矩阵,能够计算矩阵的秩,判断方阵是否可逆,判定向量组的线性相关性。将矩阵转化成行简化阶梯形矩阵,可以快速找出向量组的极大无关组,并且写出其余向量用这个极大无关组的线性表示,不仅如此,将线性方程组的增广矩阵转化成行简化阶梯形矩阵,可以写出线性方程组的唯一解、无解或者无穷多解。计算行简化阶梯形矩阵贯穿了线性代数的矩阵、向量组的线性相关性、求解线性方程组等多个章节的学习,在传统的线性代数教学中,将矩阵转化成行简化阶梯形矩阵通常采用初等行变换的方法来计算,人工计算占用时间多,计算量大,效率也不高。本文借助常用软件Excel,设计了一款行简化阶梯形矩阵的计算程序,实现了矩阵行简化阶梯形的一键智能化[1]。
1 相关定义
定义1 若一个矩阵的所有零行在非零行之下,且非零行的首非零元素所在列在上一行(如果存在的话) 的首非零元素所在列的右面,则称此矩阵为行阶梯形矩阵。
定义2 若一个矩阵是行阶梯形矩阵,并且非零行的首非零元素为1,首非零元素所在列的其余元素都为0,则称该矩阵为行简化阶梯形矩阵[2]。
2 行简化阶梯形矩阵的算法与Excel VBA程序实现
2.1 算法
根据定义,行简化阶梯形矩阵非零行的主元素所在列的其余元素必须是零,所以第一步,可以按矩阵的行开始循环,找到每一行的非零首元素,将非零首元素所在列的其他元素通过初等行变换的倍加变换都化为零。第二步,找到每一行的非零首元素,利用初等行变换的倍乘变换将它们都化为1。经过前两步的计算,此时矩阵已经与行简化阶梯形矩阵非常相似,该矩阵只要通过交换行便可转化为行简化阶梯形矩阵。所以第三步,将零行放在矩阵的最下方,非零行的主元素所在列要按照从小到大,从左往右的顺序排列,保证所有非零行主元素都在上一非零行(如果存在) 主元素的右侧。通过这三步,即可将任意矩阵转化成行简化阶梯形矩阵[3]。
2.2 Excel VBA程序实现
根据算法设计,给出行简化阶梯形矩阵实现的具体程序[4-6]:
Sub hangjianhua()
arr = Selection
Dim x, i, j, k As Integer
For k = 1 To UBound(arr, 1) - 1 '每行非零首元素所在列以下元素都化零
x = 0
Do
x = x + 1
If arr(k, x) <> 0 Then
For i = k + 1 To UBound(arr, 1)
For j = UBound(arr, 2) To 1 Step -1
arr(i, j) = arr(k, j) * (-arr(i, x) / arr(k, x)) + arr(i, j)
Next j
Next i
Exit Do
End If
Loop Until x = UBound(arr, 2)
Next k
For k = UBound(arr, 1) To 2 Step -1 '每行非零首元素所在列以上元素都化零
x = 0
Do
x = x + 1
If arr(k, x) <> 0 Then
For i = 1 To k - 1
For j = UBound(arr, 2) To 1 Step -1
arr(i, j) = arr(k, j) * (-arr(i, x) / arr(k, x)) + arr(i, j)
Next j
Next i
Exit Do
End If
Loop Until x = UBound(arr, 2)
Next k
For i = 1 To UBound(arr, 1) '每行非零首元素都化为1
x = 0
Do
x = x + 1
If arr(i, x) <> 0 Then
For j = UBound(arr, 2) To 1 Step -1
arr(i, j) = arr(i, j) / arr(i, x)
Next j
Exit Do
End If
Loop Until x = UBound(arr, 2)
Next i
Dim zyl()
ReDim zyl(1 To UBound(arr, 1))
For i = 1 To UBound(arr, 1) '按行循环,找到每行非零首元素所在列,储存进数组zyl
j = 0
Do While j < UBound(arr, 2)
j = j + 1
If arr(i, j) <> 0 Then
zyl(i) = j
Exit Do
Else
zyl(i) = 0
End If
Loop
Next i
Dim temp, arr1()
ReDim arr1(1 To UBound(arr, 2))
For x = 1 To UBound(zyl) - 1 '用冒泡排序法将数组zyl从大到小排列,并同时交换arr数组的相应行
For y = x + 1 To UBound(zyl)
If zyl(x) < zyl(y) Then
temp = zyl(x)
zyl(x) = zyl(y)
zyl(y) = temp
For j = 1 To UBound(arr, 2)
arr1(j) = arr(x, j)
arr(x, j) = arr(y, j)
arr(y, j) = arr1(j)
Next j
End If
Next y
Next x
For x = 1 To UBound(zyl) - 1 '将数组zyl除零外的数从小到大排列,并同时交换arr数组的相应行
For y = x + 1 To UBound(zyl)
If zyl(x) > zyl(y) And zyl(x) <> 0 And zyl(y) <> 0 Then
temp = zyl(x)
zyl(x) = zyl(y)
zyl(y) = temp
For j = 1 To UBound(arr, 2)
arr1(j) = arr(x, j)
arr(x, j) = arr(y, j)
arr(y, j) = arr1(j)
Next j
End If
Next y
Next x
Range("a8").Resize(UBound(arr, 1), UBound(arr, 2)) = arr
End Sub
3 应用举例
例1 计算向量组[α1=1,2,1,0],[α2=2,5,3,2],[α3=-1,2,-6,8],[α4=0,3,3,6],[α5=4,5,0,-6]的秩,求一个极大无关组,并将剩余向量由极大无关组线性表示。
在Excel的[A1]至[E4]单元格内依次输入向量组[α1,α2,α3,α4,α5],选中[A1]至[E4]单元格后,左键单击“开发工具”——Visual Basic,在通用窗口内运行本文2.2中的VBA程序,运行结果如图1所示。
A8至E11单元格返回了例1中向量组的行简化阶梯形矩阵,非零行的行数为3,因此,[rα1,α2,α3,α4,α5=3]。根据主元列所在位置得到向量组的一个极大无关组为[α1,α2,α3],其余两个向量[α4,α5]可以由这个极大无关组线性表示为:[α4=-6α1+3α2],[α5=11α1-349α2+19α3]。
例2 求下列非齐次线性方程组的通解:
[x1-x2-x3+x4=0x1-x2+x3-3x4=1x1-x2-2x3+3x4=-12]
在Excel的[A1]至[E3]单元格内输入线性方程组的增广矩阵,选中[A1]至[E3]单元格后,左键单击“开发工具”——Visual Basic,在通用窗口内运行本文2.2中的VBA程序,运行结果如图2所示。
A8至E10单元格返回了例2中线性方程组增广矩阵的行简化阶梯形矩阵,此时方程组有解且为无穷多解,
并有[x1=x2+x4+12x3=2x4+12],其中[x1,x3]为基本变量,[x2,x4]为自由变量,令[x2=k1],[x4=k2],其中[k1,k2]为任意常数,
因此,原线性方程组的通解为:
[x1x2x3x4=120120+k11100+k21021]
4 总结与讨论
本文设计的行简化阶梯形矩阵转化的程序是基于常用软件Excel的,考虑到Excel具有广泛的群众基础,使用携带都比较方便,具有较好的可推广性。对比传统教学的人工计算,本文的设计能大大提高线性代数教学的课堂效率,帮助学生理解一些抽象的数学概念,激发学生的探索兴趣,提升教学效果。Excel软件本身含有计算矩阵乘积、矩阵的逆以及行列式值的函数,分别为MMULT、MINVERSE和MDETERM,结合本文的设计,基本涵盖了线性代数中行列式、矩阵及其运算、矩阵的初等变换和线性方程组、向量组的线性相关性章节的计算部分,适合开发成与线性代数相配套的计算实验课,增强课程的实用性。
参考文献:
[1] 王玺.线性代数[M].北京:高等教育出版社,2018.
[2] 段正敏,刘德强,徐建文.线性代数[M].3版.北京:高等教育出版社,2019.
[3] 黄磊.线性代数[M].2版.北京:高等教育出版社,2019.
[4] 颜宁生.线性代数:Excel版教学用书[M].北京:冶金工业出版社,2014.
[5] 胡建华,楼吉林.Excel VBA实用教程[M].杭州:浙江大学出版社,2015.
[6] 韩立刚,徐侃,张立明.Excel VBA案例实战[M].北京:人民邮电出版社,2022.
【通联编辑:谢媛媛】