Python矩阵运算(不使用库)

参考文献
矩阵求解行列式
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, 均为正整数,求正实数根。

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

  • 12
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值