Excel·VBA矩阵、求逆矩阵、解线性方程组

这篇具有很好参考价值的文章主要介绍了Excel·VBA矩阵、求逆矩阵、解线性方程组。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

初等变换法求逆矩阵

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

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

Excel·VBA矩阵、求逆矩阵、解线性方程组
从左往右依次将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

Excel·VBA矩阵、求逆矩阵、解线性方程组
然后检查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 Function
    m = 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 m
        For j = 1 To m * 2
            If j <= m Then
                mrr(i, j) = arr(i, j)
            Else
                If j - m = i Then mrr(i, j) = 1 Else mrr(i, j) = 0  '扩充单位矩阵
            End If
        Next
    Next
    '将1-m列的非左对角线的值消为0
    Do
        done = True
        For j = 1 To m  '列遍历
            For i = 1 To m  '行遍历
                If j <> i And mrr(i, j) <> 0 Then  '非左对角线,非0
                    done = False: coef = mrr(i, j) / mrr(j, j)  '系数
                    For c = 1 To m * 2
                        mrr(i, c) = mrr(j, c) * coef - mrr(i, c)
                    Next
                End If
            Next
        Next
    Loop Until done = True
    '将1-m列的左对角线的值转为1
    Do
        done = True
        For j = 1 To m  '列遍历
            If mrr(j, j) <> 1 Then
                done = False: coef = 1 / mrr(j, j)  '系数
                For c = 1 To m * 2
                    mrr(j, c) = mrr(j, c) * coef
                Next
            End If
        Next
    Loop Until done = True
    For i = 1 To m    '返回结果数组
        For j = 1 To m
            result(i, j) = mrr(i, j + m)
        Next
    Next
    inverse_matrix = result
End Function

举例

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

Excel·VBA矩阵、求逆矩阵、解线性方程组
计算结果与内置函数MInverse基本一致

矩阵解线性方程组

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

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

矩阵形式
Excel·VBA矩阵、求逆矩阵、解线性方程组
可以用过逆矩阵求得x、y的值

Sub 矩阵解线性方程组()
    'MMult矩阵乘积函数;MInverse矩阵的逆矩阵函数(参数必须为正方形数值数组)
    '矩阵解多元一次方程组,矩阵A*B=C,此处为已知AC求B,B=A逆*C
    arr = [{1, 1; 2, 4}]
    brr = [{8; 10}]
    crr = WorksheetFunction.MMult(WorksheetFunction.MInverse(arr), brr)
    For Each c In crr
        Debug.Print c
    Next
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站-求逆矩阵的三种方法》
《知乎-矩阵为什么能解方程?》文章来源地址https://www.toymoban.com/news/detail-455055.html

到了这里,关于Excel·VBA矩阵、求逆矩阵、解线性方程组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 线性代数——线性方程组和矩阵(Linear and Matrices)

    1.Identify which of the following equations are linear equations: (判断哪些是线性方程) 只有(4)是,一般形式如下 特征:每一项都是一次的,也不代幂什么的 线性方程组(System of linear equations) ai,j是系数(i代表是第几个方程里,j是代表在方程里的第几个),b1是右端项,xj是未

    2023年04月08日
    浏览(32)
  • LA@2@1@线性方程组和简单矩阵方程有解判定定理

    线性方程组有解判定 线性方程组 A x = b Abold{x}=bold{b} A x = b 有解的 充分必要条件是它的系数矩阵A和增广矩阵 ( A , b ) (A,bold{b}) ( A , b ) 具有相同的秩 R ( A ) = R ( A , b ) R(A)=R(A,bold{b}) R ( A ) = R ( A , b ) ,记 r = R ( A ) = R ( A , b ) r=R(A)=R(A,bold{b}) r = R ( A ) = R ( A , b ) : 若 r = n r=n r = n 有

    2024年02月12日
    浏览(28)
  • 【线代】矩阵的秩和线性方程组的解的情况

    行最简型矩阵 :(也可以叫做行最简阶梯型矩阵,或者行简化阶梯型矩阵),其特点是:非零行的首非零元为1,且这些非零元所在的列的其它元素都为0。所谓的行最简的意思就是对应的方程组是“最简单的”,就是说,对应的方程组,最多只需要移项就行了,不再需要其他任何

    2024年01月19日
    浏览(27)
  • 【算法竞赛模板】求解线性方程组是否有解(求解矩阵的秩)

        在实际运用中需判断线性方程组有无解,可以通过矩阵运算判断线性方程组是否有解 线性方程组有无解总结: 矩阵求解秩流程:    所以:当我们遇到题目问线性方程组是否有解时,只需求解系数矩阵的秩与增广矩阵的秩的关系 。我们可以通过分别求系数矩阵与增

    2024年02月12日
    浏览(27)
  • 线性方程组系数矩阵的秩与解的个数的关系

    齐次方程组: A x = 0 Ax=0 A x = 0 系数矩阵 A n × n A_{n×n} A n × n ​ 的秩 解的个数 满秩: r ( A ) = n r(A)=n r ( A ) = n 仅有零解 不满秩: r ( A ) = r n r(A)=rn r ( A ) = r n 有无穷多解 注: 齐次线性方程 A x = 0 Ax=0 A x = 0 一定有解. 当 r ( A ) = r n r(A)=rn r ( A ) = r n 时, 基础解系 (线性无关的

    2024年02月01日
    浏览(37)
  • 【考研数学】矩阵、向量与线性方程组解的关系梳理与讨论

    两个原因让我想写这篇文章,一是做矩阵题目的时候就发现这三货经常绑在一起,让人想去探寻其中奥秘;另一就是今天学了向量组的秩,让我想起来了之前遗留下来的一个问题:到底存不存在系数矩阵的秩和增广矩阵的秩之差比 1 大的情况?可能这个问题有点抽象,不过看

    2024年02月11日
    浏览(43)
  • 数值分析第二次作业-求解系数矩阵为Hilbert 矩阵的线性方程组

    现要求解系数矩阵由16 阶Hilbert 方程组构成的线性方程组,右端项为  即要求解方程组Ax = b,其中 A=A0,b=b0  分别用高斯-赛德尔方法、最速下降法、共轭梯度法求解如下。 2.1. 高斯-赛德尔方法     2.2. 最速下降法    2.3. 共轭梯度法  在最速下降法中,搜索方向p取的是函数减

    2024年02月05日
    浏览(61)
  • 线性代数的学习和整理14: 线性方程组求解的3种方法,重点讲矩阵函数求解

    目录 0 写在前面的一些内容 0.1 学习心得: 0.2 参考其他书籍总结的知识点,对照学习 1 线性方程组求解 1.1 常见的线性方程组如下 1.2 记住常见的 矩阵函数的维数的关系 1.3  需要求解的方程组和矩阵的对应关系,需要先厘清 1.3.1 如果只需要求解x,是类 Ax=b的形式 1.3.2   如

    2024年02月05日
    浏览(46)
  • 【数值计算方法(黄明游)】解线性代数方程组的迭代法(一):向量、矩阵范数与谱半径【理论到程序】

       注意:速读可直接跳转至“4、知识点总结”及“5、计算例题”部分   当涉及到线性代数和矩阵理论时, 向量、矩阵范数以及谱半径 是非常重要的概念,下面将详细介绍这些内容: a. 定义及性质   考虑一个 n n n 维向量 x x x ,定义一个实值函数 N ( x ) N(x) N ( x ) ,

    2024年01月25日
    浏览(34)
  • Matlab | Lab4——用LU 分解法、 Jacobi 迭代、 Gauss-Seidel 迭代 解线性病态方程组(系数矩阵为Hilbert矩阵)

    考虑线性方程组Hx=b,其中H为n阶Hilbert矩阵,即 通过先给 定解 (例如取x的各个分量为1),再计算出右端向量b的办法给出一个精确解已知的问题. (1)分别编写Doolittle LU 分解法、 Jacobi 迭代、 Gauss-Seidel 迭代的一般程序; (2) 取阶数n=6,分别用 LU 分解法、 Jacobi 迭代、 Gauss-S

    2024年02月11日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包