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

news2024/11/15 17:17:08

初等变换法求逆矩阵

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 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

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

矩阵解线性方程组

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

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

矩阵形式
在这里插入图片描述
可以用过逆矩阵求得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站-求逆矩阵的三种方法》
《知乎-矩阵为什么能解方程?》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/400427.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

海格里斯HEGERLS料箱穿梭车生产厂家|配有高速货物提升机滚筒输送线设备的料箱四向穿梭车立体库

随着物流自动化需求的增中和自动化料箱数量的增加&#xff0c;现在市场对料箱四向穿梭车系统的需求正在逐渐增加&#xff0c;这也使得四向穿梭车在储物效率和储物空间利用率方面的优势的更加突出&#xff0c;其应用场景也在不断扩大。料箱四向穿梭车仓储方案已成为一种高效、智…

svg的深度利用绕过waf

目录 DOM树的构建 源码 img失败的原因 解法一 --- svg成功的原因 触发流程 实验 解法二 --- details标签 事件触发流程 实验验证 总结 首先在解这道题的开始连了解下什么是DOM树&#xff0c;以及DOM树的构建 DOM树的构建 我们知道JS是通过DOM接口来操作文档的&…

针对博客系统的自动化测试

针对博客系统进行web自动化测试 文章目录针对博客系统进行web自动化测试引入依赖创建出合适的目录结构AutoTestUtilsBlogLoginTestBlogListTestBLogEditTestBlogDetailTest使用套件执行关于博客系统的自动化测试的源代码已经上传至gitee链接 引入依赖 首先在pom.xml上导入依赖…

【错误记录】映射文件发生改变

遇到映射文件发生改变在项目中有的地方是使用反射机制进行的操作&#xff0c;可能对于类进行了某些更改&#xff0c;科室映射文件没有更改&#xff0c;采用匿名就会出现这样的问题&#xff0c;解决办法要么更改映射文件&#xff0c;要不不要使用匿名调用。JavaDocs路径报红Clas…

ruoyi-vue-plus学习2(异步日志)(@EventListener)(@Async)(线程池池相关)

ruoyi-vue-plus的日志打印是通过监听器实现的&#xff0c;和原版若依稍稍不同 找到登录时记录日志的方法 该方法如下 这里的参数LogininforEvent为消息类&#xff0c;注意&#xff0c;貌似高版本的spring定义消息类不需要继承ApplicationEvent类也行。直接使用普通实体类就行…

详解-序列化和反序列化

文章目录问题使用场景序列化协议TCP/IP 4 层模型的哪一层&#xff1f;序列化协议问题 什么是序列化和反序列化? Java对象保存在文件中/网络传输Java对象&#xff0c;这些场景需要用到序列化。 序列化&#xff1a;将Java对象或数据结构转化成二进制流反序列化&#xff1a;将二…

Git简单使用

Git简单使用 git初始化操作 pwd&#xff1a;显示当前目录 git init&#xff1a;把这个目录变成git可以管理的仓库 git clone&#xff1a; 从现有 Git 仓库中拷贝项目&#xff08;类似 svn checkout&#xff09;。 克隆仓库的命令格式为&#xff1a; git clone <repo&g…

【Java基础 下】 031 -- 反射 动态代理

一、什么是反射&#xff1f; 换句话说就是&#xff08;从类里拿出来&#xff09; 可以获取到&#xff1a;&#xff08;利用反射&#xff0c;我们可以获取到类中所有的东西&#xff09; 获取是先从class字节码文件中获取的 二、获取class对象的三种方式 三种方式也对应了三种阶段…

Unity之Addressable使用注意事项

基本设置 Profile文件中配置资源构建路径和资源首次加载路径&#xff0c;资源如何设置了缓存&#xff0c;在首次加载之后会将再用缓存在缓存目录&#xff0c;后面将直接从缓存目录中读取&#xff0c;RemoteLoadPath一般要设置成可以动态修改类型的参数&#xff0c;方便项目发包…

[oeasy]python0104_指示灯_显示_LED_辉光管_霓虹灯

编码进化 回忆上次内容 x86、arm、riscv等基础架构 都是二进制的包括各种数据、指令 但是我们接触到的东西 都是屏幕显示出来的字符 计算机 显示出来的 一个个具体的字型 计算机中用来展示的字型 究竟是 如何进化的 呢&#xff1f;&#x1f914;&#x1f914; 模拟电路时…

在线客服机器人是什么?有什么用处?

在线客服机器人是客服自动智能问答 真人模拟应答以及意向分类 高效低成本可以同时进行一对多服务&#xff0c;而在一些情况下&#xff0c;在线客服机器人还可以进行客户接待&#xff0c;完全代替人工客服&#xff0c;提高整个客服中心的接待量。在这里我们拿ttkefu在线机器人为…

Spring学习——Maven进阶

分模块开发与设计 创建模块 书写模块代码 通过maven指令安装模块到本地仓库(install指令) 在pom.xml中导入坐标执行maven的install命令将模块安装到本地maven仓库 团队内部开发可以发布模块功能到团队内部可共享的仓库中&#xff08;私服) 依赖管理 依赖指当前项目运行所需…

JAVA SE:多线程

一、线程简介多任务&#xff0c;看似同时在做&#xff0c;实际上同一时间只做一件事多线程&#xff0c;相当于路上多加一条车道普通方法vs多线程&#xff1a; 程序、进程、线程&#xff1a;程序&#xff1a;静态的概念&#xff0c;程序和数据的有序集合进程&#xff1a;操作系统…

CleanMyMac X4.20最新Mac系统垃圾清理工具

CleanMyMac X是一款Mac系统垃圾清理工具,可以清除Mac系统多余的语言包、系统缓存、应用程序、PowerPc软件运行库等,是硬盘瘦身的好工具。在面对一款多功能型的软件时&#xff0c;复杂的操作面板是最容易让人头疼的&#xff0c;好在 CleanMyMac 一直以来都原生支持简体中文语言&…

python第五天作业~基础练习

目录 求十进制数字9的二进制编码&#xff1a; 求十进制数字9的二进制编码中的1的数量&#xff1a; 作业15&#xff1a;求1~100之间不能被3整除的数之和 作业16&#xff1a;给定一个正整数N,找出1到N&#xff08;含&#xff09;之间所有质数的总和 作业19&#xff1a;计算PI&…

为什么那么多人转行编程都首选Java

计算机专业通常从C语言开始学&#xff0c;非计算机专业想要转行编程首选Java的主要原因&#xff1a;市场需求量大。Java可以用于开发各种应用程序&#xff0c;包括企业级Web应用程序、移动应用程序、桌面应用程序、游戏、嵌入式系统、云基础设施等等。在游戏领域也有两大经典游…

Meta带头甩卖 VR头显打起价格战

新春三月&#xff0c;准备入手VR头显的“等等党”终于迎来降价利好。以Meta为首的一众VR厂商们纷纷打折&#xff0c;无论是为了清理库存、回收成本还是让步硬件新品&#xff0c;普通消费者都喜闻乐见。 上周五&#xff0c;Meta 率先官宣Meta Quest Pro与Meta Quest 2 的256GB版…

效率工具-快速创建虚拟机,Vagrant真香!

工欲善其事&#xff0c;必先利其器&#xff0c;开发环境和开发工具就是我们开发人员的剑&#xff0c;所以我们需要一个快并且好用的剑。本文是向大家介绍虚拟机创建vagrant&#xff0c;它能够实现开发人员本机快速创建虚拟机&#xff0c;能够带来高效学习各种技术价值。1 Vagra…

我的投稿之旅

一、铁道科学与工程学报选择这个期刊的原因是&#xff1a;感觉影响因子较低&#xff0c;而且实验室有师兄师姐中过这个期刊&#xff0c;所以抱着试一试的心态投了。投稿之前需要去官网注册账号由于方向不一致&#xff0c;被退稿了“您的稿件内容不属于本刊刊载范畴&#xff0c;…

Content-Type (MIME) el-upload文件、图片上传 | 文件改名 | 大文件 | 文件下载

MIME 为数据格式标签&#xff1b;最初 MIME 是用于电子邮件系统的&#xff0c;后来 HTTP 也采用了这一方案。 在HTTP协议消息头中&#xff0c;使用Content-Type来表示请求和响应中的媒体类型信息。 Content-Type&#xff1a;type/subtype ;parametertype 主类型&#xff0c;任…