美文网首页
逆矩阵,坐标变换与numpy

逆矩阵,坐标变换与numpy

作者: doublell | 来源:发表于2018-09-23 23:39 被阅读0次

    使用python的数值计算库numpy来计算矩阵的逆矩阵,坐标变换

    9.11和9.13作业

    第一题

    计算 C = \begin{bmatrix} -1 & 0 & 2 &1\\ 0 & 3 & 0 & -3\\ 0 & -1 & 1 & 0 \\ 2 & 4 & 0 & 2 \end{bmatrix} 的逆矩阵 C^{-1}

    import numpy as np
    
    C = np.array([[-1,0,2,1],[0,3,0,-3],[0,-1,1,0],[2,4,0,2]])
    
    print(C)
    
    [[-1  0  2  1]
     [ 0  3  0 -3]
     [ 0 -1  1  0]
     [ 2  4  0  2]]
    
    invC = np.linalg.inv(C) 
    
    print(invC)
    
    [[-5.00000000e-01 -2.77555756e-17  1.00000000e+00  2.50000000e-01]
     [ 1.66666667e-01  1.11111111e-01 -3.33333333e-01  8.33333333e-02]
     [ 1.66666667e-01  1.11111111e-01  6.66666667e-01  8.33333333e-02]
     [ 1.66666667e-01 -2.22222222e-01 -3.33333333e-01  8.33333333e-02]]
    

    第二题

    R^4中的向量 \xi = (1,2,1,1)^T 在任意基 \alpha_1 = (1,1,1,1)^T , \alpha_2 = (1,1,-1,-1)^T , \alpha_3 = (1,-1,1,-1)^T , \alpha_4 = (1,-1,-1,1)^T 下的坐标Y

    #原坐标为
    x = np.array([1,2,1,1])
    print(x)
    
    [1 2 1 1]
    
    #写出过渡矩阵
    A = np.array([[1,1,1,1],[1,1,-1,-1],[1,-1,1,-1],[1,-1,-1,1]])
    print(A)
    
    [[ 1  1  1  1]
     [ 1  1 -1 -1]
     [ 1 -1  1 -1]
     [ 1 -1 -1  1]]
    

    ⚠️由于numpy中的广播机制,直接使用*符号会导致错误的计算结果

    
    xn = np.linalg.inv(A)*x
    print(xn)
    
    [[ 0.25  0.5   0.25  0.25]
     [ 0.25  0.5  -0.25 -0.25]
     [ 0.25 -0.5   0.25 -0.25]
     [ 0.25 -0.5  -0.25  0.25]]
    

    正确的计算可以使用np.dot()方法,此方法为真正的矩阵乘法

    xn = np.dot(np.linalg.inv(A),x)
    print(xn)
    
    [ 1.25  0.25 -0.25 -0.25]
    

    相关文章

      网友评论

          本文标题:逆矩阵,坐标变换与numpy

          本文链接:https://www.haomeiwen.com/subject/mjfcoftx.html