import math
import numpy as np
# 代码4-29
A = np.matrix([[3, -1],[-1, 3]])
# 方法一
print('矩阵A的特征值为:', np.linalg.eigvals(A))
矩阵A的特征值为: [4. 2.]
# 方法二
A1,A2 = np.linalg.eig(A)
print('矩阵A的特征值为:', A1)
print('矩阵A的特征向量为:\n', A2)
矩阵A的特征值为: [4. 2.] 矩阵A的特征向量为: [[ 0.70710678 0.70710678] [-0.70710678 0.70710678]]
# 代码4-30
A = np.mat([[3,1],[2,2]])
A1,A2 = np.linalg.eig(A)
print('矩阵A的特征值为:\n', A1)
print('矩阵A的特征向量为:\n', A2)
矩阵A的特征值为: [4. 1.]
矩阵A的特征向量为: [[ 0.70710678 -0.4472136 ] [ 0.70710678 0.89442719]]
# 矩阵的乘
a = np.mat([[3,1],[2,2]])
b = np.mat([[5],[2]])
#a*a*b
# 转化为特征值和特征向量的乘
4*4*4*np.mat([1,1])+np.mat([1,-2])
matrix([[65, 62]])
# 代码4-31
A = np.mat([[1,3,3],[-3,-5,-3],[3,3,1]])
A1,A2 = np.linalg.eig(A)
print('矩阵A的特征值为:', A1)
print('矩阵A的特征向量为:\n', A2)
# 构建矩阵P
P = np.mat(A2)
print('矩阵P为:\n', P)
# 构建矩阵D
D = np.diag(A1)
print('矩阵D为:\n', D)
矩阵A的特征值为: [ 1. -2. -2.] 矩阵A的特征向量为: [[ 5.77350269e-01 -1.28197512e-16 -6.72654054e-01] [-5.77350269e-01 -7.07106781e-01 7.37141689e-01] [ 5.77350269e-01 7.07106781e-01 -6.44876349e-02]] 矩阵P为: [[ 5.77350269e-01 -1.28197512e-16 -6.72654054e-01] [-5.77350269e-01 -7.07106781e-01 7.37141689e-01] [ 5.77350269e-01 7.07106781e-01 -6.44876349e-02]] 矩阵D为: [[ 1. 0. 0.] [ 0. -2. 0.] [ 0. 0. -2.]]
# 代码4-32
import math
sq2 = math.sqrt(2)/2
A = np.mat([[sq2,sq2],[-sq2,sq2]])
print('矩阵A.T*A的结果为:\n', A.T*A)
矩阵A.T*A的结果为: [[1. 0.] [0. 1.]]
# 代码4-33
v = np.array([1,-2,2,0])
vv = math.sqrt(np.sum(v.T*v))
u = (1/vv)*(v.T)
print('向量v的长度为:', vv)
print('单位向量u为:', u)
向量v的长度为: 3.0
单位向量u为: [ 0.33333333 -0.66666667 0.66666667 0. ]
# 代码4-34
a = np.array([5,6,-1])
b = np.array([4/3,-1,2/3])
print('向量a*b的结果为:', np.sum(a*b))
向量a*b的结果为: -5.551115123125783e-16
# 代码4-35
A = np.mat([[3,-2,4],[-2,6,2],[4,2,3]])
A1,A2 = np.linalg.eig(A)
print('矩阵A的特征值为:', A1)
print('矩阵A的特征向量为:\n', A2)
# 特征向量正交化
B3 = A2[:,2]-np.float(np.vdot(A2[:,2],A2[:,0]))/np.float(np.vdot(A2[:,0],A2[:,0]))*A2[:,0]
# 特征向量单位化
P1 = math.sqrt(np.linalg.norm(A2[:,0])) * A2[:,0]
P2 = math.sqrt(np.linalg.norm(A2[:,1])) * A2[:,1]
P3 = math.sqrt(np.linalg.norm(B3)) * B3
# 构建矩阵D
D = np.diag(A1)
print('矩阵D为:\n', D)
矩阵A的特征值为: [ 7. -2. 7.] 矩阵A的特征向量为: [[ 0.74535599 -0.66666667 -0.48371741] [-0.2981424 -0.33333333 0.87397587] [ 0.59628479 0.66666667 -0.04672947]] 矩阵D为: [[ 7. 0. 0.] [ 0. -2. 0.] [ 0. 0. 7.]]
# 代码4-36
L = np.mat([[1,1/2,0],[0,1/2,1],[0,0,0]])
L1,L2 = np.linalg.eig(L)
print('矩阵A的特征值为:', L1)
print('矩阵A的特征向量为:\n', L2)
# 构造矩阵
D = np.diag(L1)
print('矩阵D为:\n', D)
# 构建矩阵C
C = np.mat(L2)
print('矩阵C为:\n', C)
矩阵A的特征值为: [1. 0.5 0. ] 矩阵A的特征向量为: [[ 1. -0.70710678 0.40824829] [ 0. 0.70710678 -0.81649658] [ 0. 0. 0.40824829]] 矩阵D为: [[1. 0. 0. ] [0. 0.5 0. ] [0. 0. 0. ]] 矩阵C为: [[ 1. -0.70710678 0.40824829] [ 0. 0.70710678 -0.81649658] [ 0. 0. 0.40824829]]