逆矩阵,坐标变换与numpy

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

9.11和9.13作业

第一题

计算 的逆矩阵

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]]

第二题

求 中的向量 在任意基 下的坐标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)