📜  矩阵的基本运算(1)

📅  最后修改于: 2023-12-03 15:41:01.901000             🧑  作者: Mango

矩阵的基本运算

矩阵是计算机科学中常用的一种数据结构,常用于线性代数中的各种计算和应用。矩阵的基本运算包括加、减、乘三种。

矩阵加法

矩阵加法是指两个矩阵对应位置上的元素相加得到一个新矩阵。矩阵加法要求两个矩阵的维度必须相同。

示例代码:

def matrix_addition(a, b):
    result = []
    for i in range(len(a)):
        row = []
        for j in range(len(a[0])):
            row.append(a[i][j] + b[i][j])
        result.append(row)
    return result
矩阵减法

矩阵减法是指两个矩阵对应位置上的元素相减得到一个新矩阵。矩阵减法要求两个矩阵的维度必须相同。

示例代码:

def matrix_subtraction(a, b):
    result = []
    for i in range(len(a)):
        row = []
        for j in range(len(a[0])):
            row.append(a[i][j] - b[i][j])
        result.append(row)
    return result
矩阵乘法

矩阵乘法是指两个矩阵相乘得到一个新矩阵。矩阵乘法要求第一个矩阵的列数等于第二个矩阵的行数。

示例代码:

def matrix_multiplication(a, b):
    result = []
    for i in range(len(a)):
        row = []
        for j in range(len(b[0])):
            s = 0
            for k in range(len(b)):
                s += a[i][k] * b[k][j]
            row.append(s)
        result.append(row)
    return result
逆矩阵

逆矩阵是指一个矩阵与其逆矩阵相乘得到单位矩阵。求逆矩阵需要先求出矩阵的行列式,判断是否可逆,如果可逆再求出伴随矩阵。伴随矩阵是将原矩阵的每个元素的代数余子式组成的矩阵的转置矩阵。

示例代码:

def matrix_determinant(a):
    """
    计算行列式
    """
    n = len(a)
    if n == 1:
        return a[0][0]
    elif n == 2:
        return a[0][0]*a[1][1] - a[0][1]*a[1][0]
    else:
        s = 0
        for j in range(n):
            s += pow(-1, j) * a[0][j] * matrix_determinant(matrix_minor(a, 0, j))
        return s

def matrix_minor(a, i, j):
    """
    计算代数余子式
    """
    m = []
    for x in range(len(a)):
        if x != i:
            row = []
            for y in range(len(a[0])):
                if y != j:
                    row.append(a[x][y])
            m.append(row)
    return m

def matrix_transpose(a):
    """
    转置矩阵
    """
    t = []
    for j in range(len(a[0])):
        row = []
        for i in range(len(a)):
            row.append(a[i][j])
        t.append(row)
    return t

def matrix_adjoint(a):
    """
    计算伴随矩阵
    """
    n = len(a)
    adj = []
    for i in range(n):
        row = []
        for j in range(n):
            sign = pow(-1, i+j)
            minor = matrix_minor(a, i, j)
            determinant = matrix_determinant(minor)
            row.append(sign * determinant)
        adj.append(row)
    adj = matrix_transpose(adj)
    return adj

def matrix_inverse(a):
    """
    求逆矩阵
    """
    determinant = matrix_determinant(a)
    if determinant == 0:
        raise Exception("矩阵不可逆")
    adj = matrix_adjoint(a)
    n = len(a)
    result = []
    for i in range(n):
        row = []
        for j in range(n):
            row.append(adj[i][j] / determinant)
        result.append(row)
    return result

以上就是矩阵的基本运算,包括加法、减法、乘法和逆矩阵的求法。