4.3 特征分解

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值