Python矩阵运算(不使用库)

Python矩阵运算(不使用库),第1张

参考文献
矩阵求解行列式
python实现求矩阵行列式、求逆矩阵等各种矩阵 *** 作(不使用numpy包)

矩阵乘法

矩阵乘法中,需要判断两个矩阵是否可以进行相乘,即前一个矩阵的列是否等于后一个矩阵的行。具体代码如下:

class Solution:
    def multiplyofmatrix(self, A, f):
        """
        Compute matrix A * matrix f.
        For example:
        Input:
        A: [[1, 2], [3, 4]]    Row of A: 2 Col of A: 2
        f: [[1, 2], [3, 4]]    Row of f: 2 Col of f: 2
        Output:
        ans: [[7, 10], [15, 22]]

        s.t. A.col == f.col
        """
        Arow, Acol = len(A), len(A[0])
        frow, fcol = len(f), len(f[0])
        if Acol != frow:
            return 'False!'
        ans = [[0] * fcol for _ in range(Arow)]
        for i in range(fcol):
            for j in range(Arow):
                for k in range(frow):
                    ans[j][i] += A[j][k]*f[k][i]
        return ans
if __name__=='__main__':
    a = Solution().multiplyofmatrix([[1, 2], [3, 4]], [[1, 2], [3, 4]])
    print(a)
转置矩阵
    def transposeofmatrix(A):
        """
        Matrix transpose.
        For example:
        Input:
        A = [[1, 2],
             [3, 4]]
        Output:
        A_transpose = [[1, 3],
                       [2, 4]]

        """
        return [list(raw) for raw in zip(*A)]
矩阵余矩阵
    def submatrix(A, i, j):
        # 矩阵A第i行第j列元素的余矩阵
        m, n = len(A), len(A[0])
        C = [[A[x][y] for y in range(n) if y != j] for x in range(m) if x != i]  # 列表推导式
        return C
矩阵行列式

需要用到矩阵余矩阵函数,代码如下:

    def detofmatrix(A):
        m = len(A)  # 矩阵的行数
        n = len(A[0])  # 矩阵的列数
        if (m == 1 and n == 1):
            return A[0][0]
        else:
            value = 0
            for j in range(n):
                value += ((-1) ** (j + 2)) * A[0][j] * detofmatrix(submatrix(A, 0, j))
            return value
矩阵的逆

需要用到矩阵行列式函数和余矩阵函数,代码如下:

    def inverseofmatrix(A):
        m = len(A)  # 矩阵的行数
        n = len(A[0])  # 矩阵的列数
        C = [[0] * n for _ in range(m)]
        d = self.detofmatrix(A)
        for i in range(m):
            for j in range(n):
                C[i][j] = ((-1) ** (i + j + 2)) * detofmatrix(submatrix(A, j, i))
                C[i][j] = C[i][j] / d
        return C
求方程组根

∣ A x − b ∣ = 0 |Ax - b| = 0 Axb=0即为求 x = A − 1 ∗ b x = A^{-1} * b x=A1b(A可逆的情况下),调用求逆函数和矩阵相乘函数即可。

求一元n次方程正实数根

例如: x 3 + a x 2 + b x = c x^3+ax^2+bx=c x3+ax2+bx=c,其中a, b, c, 均为正整数,求正实数根。

---------持续更新----------

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/756118.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-30
下一篇 2022-04-30

发表评论

登录后才能评论

评论列表(0条)

保存