高斯约尔当法求逆矩阵_高斯约当消元法求逆矩阵

高斯约尔当法求逆矩阵_高斯约当消元法求逆矩阵介绍了求逆矩阵方法,并附带java与python语言实现

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

  首先必须要判断矩阵是不是一个方阵。然后把在矩阵右边放一个单位矩阵,然后再进行行变换,左边变成单位矩阵后吗,右边的矩阵就是逆矩阵。
  举个例子,以下矩阵:
[ 1 1 1 1 2 1 1 1 − 1 2 1 1 − 3 2 1 2 ] \left[\begin{matrix} 1 & 1 & 1 & 1\\ 2 & 1& 1& 1\\ -1 & 2& 1& 1\\ -3& 2& 1& 2\\ \end{matrix}\right] 1213112211111112
  右接一个单位矩阵
[ 1 1 1 1 1 0 0 0 2 1 1 1 0 1 0 0 − 1 2 1 1 0 0 1 0 − 3 2 1 2 0 0 0 1 ] \left[\begin{matrix} 1 & 1 & 1 & 1 & 1 & 0 & 0 & 0\\ 2 & 1& 1& 1 & 0 & 1 & 0 & 0\\ -1 & 2& 1& 1 & 0 & 0 & 1 & 0\\ -3& 2& 1& 2 & 0 & 0 & 0 & 1\\ \end{matrix}\right] 12131122111111121000010000100001
  进行行变换
[ 1 1 1 1 1 0 0 0 0 1 1 1 2 − 1 0 0 0 0 − 1 − 1 − 5 3 1 0 0 0 0 1 − 2 2 − 1 1 ] \left[\begin{matrix} 1& 1 & 1 &1 & 1 & 0 & 0 &0\\ 0& 1 & 1 &1& 2 &-1 & 0& 0\\ 0 &0 &-1 &-1 &-5 &3 &1 &0\\ 0 &0& 0& 1& -2& 2 &-1& 1\\ \end{matrix}\right] 10001100111011111252013200110001
  单位化,就变成这样了:
[ 1 0 0 0 − 1 1 0 0 0 1 0 0 − 3 2 1 0 0 0 1 0 7 − 5 0 − 1 0 0 0 1 − 2 2 − 1 1 ] \left[\begin{matrix} 1 & 0 & 0 & 0 & -1 & 1 & 0 & 0\\ 0 & 1 & 0 & 0 & -3 & 2 & 1 & 0\\ 0 & 0 & 1 & 0 & 7 & -5 & 0 & -1\\ 0 & 0 & 0 & 1 & -2 & 2 & -1 & 1\\ \end{matrix}\right] 10000100001000011372125201010011
  Java代码:

public Matrix<T> inverse() { 
   
    // 必须是个方阵
    if (this.array.length != this.array[0].length) { 
   
        throw new IllegalArgumentException("方阵才有双侧逆矩阵");
    }
    // 创建一个矩阵,单位矩阵放在右边
    final T[][] newArray = newArray(this.array.length, this.array.length << 1);
    for (int i = 0; i < newArray.length; i++) { 
   
        final T[] line = newArray[i];
        final T[] thisLine = this.array[i];
        for (int j = 0; j < thisLine.length; j++) { 
   
            line[j] = thisLine[j];
        }
        for (int j = thisLine.length; j < line.length; j++) { 
   
            if (j == thisLine.length + i) { 
   
                line[j] = oneValue();
            } else { 
   
                line[j] = zeroValue();
            }
        }
    }
    return createMatrix(newArray).toUpperTriangular().toLowerTriangle().toUnipotent()
        .subMatrix(0, this.array.length, this.array.length, this.array.length * 2);
}

  python代码:

def __invert__(self):
    # 首先新建一个单位矩阵
    size = len(self.__lines)
    unit = self.unit_matrix(size)
    new_matrix = self.append(unit)
    new_matrix.to_upper_triangle()
    new_matrix.to_lower_triangle()
    new_matrix.to_unipotent()
    return new_matrix.sub_matrix(0, size, 0, size)

# 创建单位矩阵方法
# 简化后如下:
@staticmethod
def unit_matrix(size):
    return [[1 if i == j else 0 for j in range(0, size)] for i in range(0, size)]

# 拼接矩阵方法
def append(self, matrix):
    # define an array
    rows = len(self.__lines)
    columns = len(self.__lines[0]) + len(matrix.__lines[0])
    unit = [[0 for _ in range(0, columns)] for _ in range(0, rows)]
    for y in range(0, len(unit)):
        self_line = self.__lines[y]
        other_line = matrix.__lines[y]
        # 0~ this this ~other
        for i in range(0, len(self_line)):
            unit[y][i] = self_line[i]

        for i in range(0, len(other_line)):
            unit[y][i+len(self_line)] = other_line[i]
    return Matrix(unit)
# 下三角矩阵方法
def to_lower_triangle(self):
    for i in range(len(self.__lines) - 1, -1, -1):
        # 循环遍历其前的所有行, 其前所有行进行改变
        for j in range(0, i):
            Matrix.row_operate(self.__lines[i], self.__lines[j], self.__lines[j][i], self.__lines[i][i],
                               0, len(self.__lines[i]))

# 单位矩阵方法
def to_unipotent(self):
    for i in range(0, len(self.__lines)):
        line = self.__lines[i]
        for j in range(0, len(line)):
            if i != j and line[i] != 0:
                line[j] /= line[i]
# 行变换方法
@staticmethod
def __row_operate(line1, line2, coefficient1, coefficient2, start_column, end_column):
    for i in range(start_column, end_column):
        line2[i] = line1[i] * coefficient1 - line2[i] * coefficient2
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/171684.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 《JavaScript 模式》读书笔记(5)— 对象创建模式1「建议收藏」

    这又是一个新的开始,对象的重要性不言而喻。在JavaScript中创建对象是十分容易的,之前聊过的对象字面量和构造函数都可以达到目的。但是本篇中,我们越过那些方法,以寻求一些额外的对象创建模式。本篇

    2022年3月25日
    43
  • 由华为裁员传闻引发的思考:年轻人如何避免中年危机?「建议收藏」

    由华为裁员传闻引发的思考:年轻人如何避免中年危机?「建议收藏」看到这个话题,让我想起来之前在知乎上看到的一句话,找了半天当时的截图,没找到。最后在QQ留言板上找到了:这句话确实是让人细思极恐,时间再也没有童年那么漫长了,变得越来越快。20岁时,你可以没有钱,买不起iphone4送给女朋友。总说莫欺少年穷,是因为你有大把的未来去提高自己,同时提高自己的经济实力。不然的话。30岁时,你舍不得给老婆买iphone8。40岁时,你的妻子就会因为压力迅速苍老,然后你的…

    2022年7月18日
    40
  • Windows下nmap命令及Zenmap工具的使用方法「建议收藏」

    Windows下nmap命令及Zenmap工具的使用方法「建议收藏」#Nmap简介nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。正如大多数被用于网络安全的工具,nmap也是不少黑客爱用的工具。系统管理员可以利用nmap来探测工作环境中未经批准使用的服务器,但是黑客会利用nmap来搜集目标电脑的网络设定,从而计划攻击的方法。Nmap常被跟评估系统漏洞软件Nessus混为一谈。Nmap

    2022年5月26日
    203
  • dmesg总结

    dmesg总结1.dmesg介绍在dmesg里我们可以查看到开机信息,printk产生的信息等。若研究内核代码,在代码中插入printk函数,然后通过dmesg观察是一个很好地方法。 2.dmesg输出含义dmesg输出的数字含义是什么,纠结了一会儿,下面给出解释终端输入dmesg,可以看到每行最开始显示的是一个综括号,里面的数字为timestamp,时间戳,该时间指示的系统从…

    2025年6月27日
    2
  • linux清除隐藏的挖矿程序

    linux清除隐藏的挖矿程序1.找出cpu高的程序,top找不到的话,用下面命令ps-aux–sort=-pcpu|head-102.杀掉相关进程kill-9pid3.查看crontab是否有定时任务4.删除相关命令[root@dbserverlib]#lsattrlibiacpkmn.so.3—-i——–e–libiacpkmn.so.3[root@dbserverlib]#chattr-ilibiacpkmn.so.3[root@dbserver

    2022年6月16日
    33
  • w7设置双显示器_4K+144Hz 支持FreeSync Acer XV273K显示器评测

    w7设置双显示器_4K+144Hz 支持FreeSync Acer XV273K显示器评测2018年末,AMD宣布旗下FreeSync技术正式升级为RadeonFreeSync2HDR技术,带来了亮度、对比度、层次感更加完美的游戏画面,尤其是针对HDR游戏。而在随后的CES2019上,NVIDIA对G-Sync进行了重新分级,其中G-SyncCompatible标准正式开启FreeSync显示器兼容模式。两大“劲敌”的一系列动作意味着,未来FreeSync显示器或将成为更多游…

    2022年5月6日
    68

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号