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

高斯约尔当法求逆矩阵_高斯约当消元法求逆矩阵介绍了求逆矩阵方法,并附带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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • nginx负载均衡算法有哪些_dubbo负载均衡算法

    nginx负载均衡算法有哪些_dubbo负载均衡算法nginx负载均衡的几种算法

    2022年10月12日
    2
  • object对象转换成map_object强转成map

    object对象转换成map_object强转成map1、Object转换成map的方法importjava.lang.reflect.Field;importjava.util.HashMap;importjava.util.Map;/***将Object对象里面的属性和值转化成Map对象**@paramobj*@return*@throwsIllegalAccessException*/publicstaticMap<String,

    2025年6月3日
    2
  • ubuntu 内核版本回退_ubuntu 内核版本

    ubuntu 内核版本回退_ubuntu 内核版本查看当前内核:uname-a查看系统上的所有内核:sudodpkg–get-selections|greplinux打开grub:sudovim/etc/default/grub修改:#GRUB_DEFAULT=0GRUB_DEFAULT=GRUB_DEFAULT=”AdvancedoptionsforUbuntu>Ubuntu,withLinux<回退的版本号>”例如:GRUB_DEFAULT

    2022年8月23日
    14
  • CTK环境搭建

    CTK环境搭建CTK环境搭建1 下载相关文件下载Cmake:https://cmake.org/下载ctk源码:https://github.com/commontk/CTK2 编译CTK2.1 cmake打开cmakelistctk源码下载完之后在当前文件夹下新建build目录。如图2.2 qt环境版本确认使用cmake开进入CTK-Master目录,选择源代码目录和Build目录。进行…

    2022年6月6日
    64
  • 微创业平台

    一种专为大学生创业服务的平台。主旨是,让大学生创业创新,在某种比较简单,比较容易的环境里进行。让大学生创业创新,不要太多的风险,比较容易达成创业目标。云电话,一种5G新电话。特别适合大学生微创业,更需要大学生微创新。将云电话平台,建设成湖铁微创业平台,是深圳云电话平台,与湖铁职院创新创业学院,合作打造的专为湖铁职院大学生,创新创业服务的平台。建设好湖铁微创业平台,具有重大的社会意义。√成功示范作用。先在创新创业学院,打造标杆试点MVP。√便…

    2022年4月4日
    87
  • 基于ArcGIS 二次开发 使用技巧总结

    基于ArcGIS 二次开发 使用技巧总结这两天刚忙完一个项目,趁着这几天任务轻松,抽空总结上一个项目所遇到的一些问题,都是很简单的基本操作,先列个大纲吧:一、地图的基本操作:1.工具栏的实现:包括放大、缩小、漫游、测线、测面、定位功能、比列尺、鹰眼图、动态获取所在的经纬度(传送门:https://blog.csdn.net/KK_bluebule/article/details/83414871)2.地图禁止平移,禁止放…

    2022年7月23日
    10

发表回复

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

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