python逆矩阵怎么求

Python09

python逆矩阵怎么求,第1张

python求逆矩阵的方法:

第一步,点击键盘 win+r,打开运行窗口。在运行窗口中输入“cmd",点击enter键,打开windows命令行窗口。

第二步,在windows命令行窗口中,输入“python”,点击enter键,进入python的命令交互窗口。

第三步,使用import语句,引入numpy模块,并重命名为np。

第四步,使用函数np.array()创建矩阵一个矩阵A,其中z矩阵A是2x2的矩阵。

第五步,使用函数np.linalg.inv(A),求解矩阵A的逆矩阵。

第六步,使用函数np.array()创建矩阵一个矩阵B,其中矩阵B是3x3的矩阵。

第七步,使用函数np.linalg.inv(B),求解矩阵B的逆矩阵。

更多相关学习推荐,敬请访问python教程栏目~

你好,下面是一个对应的三阶矩阵求逆的代码

import warnings

warnings.filterwarnings("ignore")

matrix1 = [

    [1,2,0,0],

    [3,4,0,0],

    [0,0,4,1],

    [0,0,3,2],

]

matrix2 = [

    [1,0,-1,2,1],

    [3,2,-3,5,-3],

    [2,2,1,4,-2],

    [0,4,3,3,1],

    [1,0,8,-11,4],

]

matrix3 = [

    [1,0,-1,2,1,0,2],

    [1,2,-1,3,1,-1,4],

    [2,2,1,6,2,1,6],

    [-1,4,1,4,0,0,0],

    [4,0,-1,21,9,9,9],

    [2,4,4,12,5,6,11],

    [7,-1,-4,22,7,8,18],

]

def step0(m):

    n = len(m)

    l = []

    for i in range(0,n):

        l.append([])

        for j in range(0,n):

            if i == j:

                l[i].append(1)

            else:

                l[i].append(0)

    return l

def step1(m):

    n = len(m)

    """交换操作记录数组 swap"""

    swap = []

    l = []

    for i in range(0,n):

        swap.append(i)

        l.append([])

        for j in range(0,n):

            l[i].append(0)

    """对每一列进行操作"""

    for i in range(0,n):

        max_row = m[i][i]

        row = i

        for j in range(i,n):

            if m[j][i] >= max_row:

                max_row = m[j][i]

                #global row

                row = j

        swap[i] = row

        """交换"""

        if row != i:

            for j in range(0,n):

                m[i][j],m[row][j] = m[row][j],m[i][j]

        """消元"""

        for j in range(i+1,n):

            if m[j][i] != 0:

                l[j][i] = m[j][i] / m[i][i]

                for k in range(0,n):

                    m[j][k] = m[j][k] - (l[j][i] * m[i][k])

    return (swap,m,l)

def step2(m):

    n = len(m)

    long = len(m)-1

    l = []

    for i in range(0,n):

        l.append([])

        for j in range(0,n):

            l[i].append(0)

    for i in range(0,n-1):

        for j in range(0,long-i):

            if m[long-i-j-1][long-i] != 0 and m[long-i][long-i] != 0:

                l[long-i-j-1][long-i] = m[long-i-j-1][long-i] / m[long-i][long-i]

                for k in range(0,n):

                    m[long-i-j-1][k] = m[long-i-j-1][k] - l[long-i-j-1][long-i] * m[long-i][k]

    return (m,l)

def step3(m):

    n = len(m)

    l = []

    for i in range(0,n):

        l.append(m[i][i])

    return l

def gauss(matrix):

    n = len(matrix)

    new = step0(matrix)

    (swap,matrix1,l1) = step1(matrix)

    (matrix2,l2) = step2(matrix1)

    l3 = step3(matrix2)

    for i in range(0,n):

        if swap[i] != i:

            new[i],new[swap[i]] = new[swap[i]],new[i]

        for j in range(i+1,n):

            for k in range(0,n):

                if l1[j][i] != 0:

                    new[j][k] = new[j][k] - l1[j][i] * new[i][k]   

    for i in range(0,n-1):

        for j in range(0,n-i-1):

            if l2[n-1-i-j-1][n-1-i] != 0:

                for k in range(0,n):

                    new[n-1-i-j-1][k] = new[n-1-i-j-1][k] - l2[n-1-i-j-1][n-i-1] * new[n-1-i][k]

    for i in range(0,n):

        for j in range(0,n):

            new[i][j] = new[i][j] / l3[i]

    return new

x1 = gauss(matrix1)

x2 = gauss(matrix2)

x3 = gauss(matrix3)

print (x1)

print (x2)

print (x3)