1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
| >>> import scipy # 导入SciPy模块
>>> from scipy import linalg 导入linalg模块
>>> a = scipy.mat('[1 2 3; 2 2 1; 3 4 3]') 生成矩阵
>>> a
matrix([[1, 2, 3],
[2, 2, 1],
[3, 4, 3]])
>>> b = linalg.inv(a) # 求a的逆矩阵
>>> b
array([[ 1. , 3. , -2. ],
[-1.5, -3. , 2.5],
[ 1. , 1. , -1. ]])
>>> a * b # 求a * b ,有误差,应为对角矩阵
matrix([[ 1.00000000e+00, 0.00000000e+00, 0.00000000e+00],
[ -2.22044605e-16, 1.00000000e+00, 4.44089210e-16],
[ 0.00000000e+00, 0.00000000e+00, 1.00000000e+00]])
>>> linalg.det(a) # 求a的行列式值,有误差,应为2
1.9999999999999996
>>> a = scipy.mat('[1 2 3]')
>>> linalg.norm(a) # 求a的模
3.7416573867739413
>>> a = scipy.mat('[1 -1; -1 1; 2 -2; -3 1]') # 建立系数矩阵
>>> a # 检验系数矩阵
matrix([[ 1, -1],
[-1, 1],
[ 2, -2],
[-3, 1]])
>>> b = scipy.mat('[1;2;3;4]') # 建立常数项向量
>>> b
matrix([[1],
[2],
[3],
[4]])
>>> x,y,z,w = linalg.lstsq(a, b) # 求最小二乘法解
>>> x # x为解
array([[-2.41666667],
[-3.25 ]])
>>> y
array([ 9.83333333])
>>> z
2
>>> w
array([ 4.56605495, 1.07291295])
>>> a = scipy.mat('[-1 1 0; -4 3 0; 1 0 2]')
>>> a
matrix([[-1, 1, 0],
[-4, 3, 0],
[ 1, 0, 2]])
>>> x,y = linalg.eig(a) # 求a的特征值
>>> x
array([ 2.+0.j, 1.+0.j, 1.+0.j]) # a的特征值
>>> y # a的特征向量
array([[ 0. , 0.40824829, 0.40824829],
[ 0. , 0.81649658, 0.81649658],
[ 1. , -0.40824829, -0.40824829]])
>>> a = scipy.mat('[]1 2 3; 0 1 2; 2 4 1')
>>> a
matrix([[1, 2, 3],
[0, 1, 2],
[2, 4, 1]])
>>> x,y,z = linalg.lu(a) # 求a的LU分解
>>> x
array([[ 0., 0., 1.],
[ 0., 1., 0.],
[ 1., 0., 0.]])
>>> y # L矩阵
array([[ 1. , 0. , 0. ],
[ 0. , 1. , 0. ],
[ 0.5, 0. , 1. ]])
>>> z # U矩阵
array([[ 2. , 4. , 1. ],
[ 0. , 1. , 2. ],
[ 0. , 0. , 2.5]])
>>> a = scipy.mat('[16 4 8; 4 5 -4; 8 -4 22]')
>>> a
matrix([[16, 4, 8],
[ 4, 5, -4],
[ 8, -4, 22]])
>>> linalg.cholesky(a) # 求a的Cholesky分解
array([[ 4., 1., 2.],
[ 0., 2., -3.],
[ 0., 0., 3.]])
|