Excel·VBA矩阵、求逆矩阵、解线性方程组
创始人
2024-05-31 13:54:33
0

初等变换法求逆矩阵

vba内置函数MInverse可以计算矩阵的逆矩阵,《Office VBA 参考-WorksheetFunction.MInverse 方法 (Excel)》

初等变换法代码思路
对于一个3x3矩阵(下图3x3红色部分)右侧扩充单位矩阵(下图3x3黑色部分),abc为行号

在这里插入图片描述
从左往右依次将1-3列非左对角线部分的数值消为0:下图“第1次”将第1列消为0、“第2次”将第2列消为0、“第3次”将第3列消为0。每次计算将固定不变的行值x系数-本行原值=本行现值
系数的计算方法:第n列消0、得到第m行时,系数=(n,m)/(n,n)。取上一次的数组值
如“第1次”,n = 1、m = 2时,系数 = 1/1 = 1;n = 1、m = 3时,系数 = -1/1 = -1
如“第2次”,n = 2、m = 1时,系数 = -4/1 = -4;n = 2、m = 3时,系数 = -2/1 = -2

在这里插入图片描述
然后检查1-3列左对角线部分的值是否为1,不为1的转为1,对应第4次
值不为1的,整行除该值本身
最后得到左侧为单位矩阵(上图第4次3x3黑色部分)右侧为逆矩阵(上图第4次3x3红色部分),输出右侧逆矩阵即可

Function inverse_matrix(ByVal arr)'初等变换法,返回数组矩阵的逆矩阵;arr数组矩阵必须为正方形数值数组Dim m&, i&, j&, c&, done As Boolean, coef#arr = WorksheetFunction.Transpose(WorksheetFunction.Transpose(arr))  '转为从1开始计数If UBound(arr) - LBound(arr) <> UBound(arr, 2) - LBound(arr, 2) Then Debug.Print "非正方形数组": Exit Functionm = UBound(arr) - LBound(arr) + 1: ReDim mrr(1 To m, 1 To m * 2): ReDim result(1 To m, 1 To m)For i = 1 To mFor j = 1 To m * 2If j <= m Thenmrr(i, j) = arr(i, j)ElseIf j - m = i Then mrr(i, j) = 1 Else mrr(i, j) = 0  '扩充单位矩阵End IfNextNext'将1-m列的非左对角线的值消为0Dodone = TrueFor j = 1 To m  '列遍历For i = 1 To m  '行遍历If j <> i And mrr(i, j) <> 0 Then  '非左对角线,非0done = False: coef = mrr(i, j) / mrr(j, j)  '系数For c = 1 To m * 2mrr(i, c) = mrr(j, c) * coef - mrr(i, c)NextEnd IfNextNextLoop Until done = True'将1-m列的左对角线的值转为1Dodone = TrueFor j = 1 To m  '列遍历If mrr(j, j) <> 1 Thendone = False: coef = 1 / mrr(j, j)  '系数For c = 1 To m * 2mrr(j, c) = mrr(j, c) * coefNextEnd IfNextLoop Until done = TrueFor i = 1 To m    '返回结果数组For j = 1 To mresult(i, j) = mrr(i, j + m)NextNextinverse_matrix = result
End Function

举例

Sub 逆矩阵测试()aa = Array(1, 5, 9, 13)For Each a In aaarr = Cells(a, 1).Resize(3, 3)brr = inverse_matrix(arr)Cells(a, "e").Resize(3, 3) = brrcrr = WorksheetFunction.MInverse(arr)Cells(a, "i").Resize(3, 3) = crrNext
End Sub

在这里插入图片描述
计算结果与内置函数MInverse基本一致

矩阵解线性方程组

对于多元一次的线性方程组,利用矩阵求解较为方便
如,方程组

x + y = 8
2x + 4y = 10

矩阵形式
在这里插入图片描述
可以用过逆矩阵求得x、y的值

Sub 矩阵解线性方程组()'MMult矩阵乘积函数;MInverse矩阵的逆矩阵函数(参数必须为正方形数值数组)'矩阵解多元一次方程组,矩阵A*B=C,此处为已知AC求B,B=A逆*Carr = [{1, 1; 2, 4}]brr = [{8; 10}]crr = WorksheetFunction.MMult(WorksheetFunction.MInverse(arr), brr)For Each c In crrDebug.Print cNext
End Sub

结果为11、-3
同理,方程组

x+2y+3z=14
x-y+4z=11
2x+3y-z=5
arr = [{1, 2, 3; 1, -1, 4; 2, 3, -1}]
brr = [{14; 11; 5}]

结果为1、2、3

参考资料
《B站-求逆矩阵的三种方法》
《知乎-矩阵为什么能解方程?》

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...