逆矩阵,坐标变换与numpy

使用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]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容