使用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]
网友评论