Numpy线性代数-numpy.linalg.solve()
前言NumPyNumPyNumPy提供了线性代数函数库linalg,该库包含了线性代数所需的所有功能,可以看看下面的说明。函数内容dot两数组的点积vdot两向量的点积inner两数组的内积determinant数组的行列式matmul两数组的矩阵积inv求矩阵的逆solve求解线性矩阵方程相关函数介绍numpy.dot():numpy.vdot():numpy.inner():numpy.det
前言
N
u
m
P
y
NumPy
NumPy提供了线性代数函数库linalg
,该库包含了线性代数所需的所有功能,可以看看下面的说明。
函数 | 内容 |
---|---|
dot | 两数组的点积 |
vdot | 两向量的点积 |
inner | 两数组的内积 |
determinant | 数组的行列式 |
matmul | 两数组的矩阵积 |
inv | 求矩阵的逆 |
solve | 求解线性矩阵方程 |
相关函数介绍
numpy.dot()
:numpy.dot()
numpy.vdot
:numpy.vdot()
numpy.inner()
:numpy.inner()
numpy.determinant()
:numpy.determinant()
numpy.matmul()
:numpy.matmul()
numpy.inv()
:numpy.inv()
numpy.solve()
:numpy.solve()
numpy.linalg.solve()
numpy.linalg.solve()
函数用于求解矩阵形式的线性方程的解。
比如线性方程:
2 x + 2 y + 2 z = 5 2x + 2y + 2z = 5 2x+2y+2z=5
2 y + 4 z = − 3 2y + 4z = -3 2y+4z=−3
2 x + 5 y − 2 z = 26 2x + 5y - 2z = 26 2x+5y−2z=26
可以使用矩阵进行表示:
[
2
2
2
0
2
4
2
5
−
2
]
[
x
y
z
]
=
[
5
−
3
26
]
\begin{bmatrix} 2& 2& 2 \\0& 2 & 4 \\2& 5 &-2 \end{bmatrix} \begin{bmatrix} x \\y \\z \end{bmatrix} = \begin{bmatrix} 5 \\-3 \\26 \end{bmatrix}
⎣⎡20222524−2⎦⎤⎣⎡xyz⎦⎤=⎣⎡5−326⎦⎤
即 A X = B → X = A − 1 B AX=B\rightarrow X=A^{-1}B AX=B→X=A−1B
可以看到要使用numpy.linalg.solve()
函数求解线性方程,必须先了解矩阵的逆。
numpy.linalg.inv()
numpy.linalg.inv()
函数计算矩阵的乘法逆矩阵。
逆矩阵:设A
是数域上的一个
n
n
n阶矩阵,若在相同数域上存在另一个
n
n
n阶矩阵B
,使得:
A
B
=
B
A
=
E
AB=BA=E
AB=BA=E ,则我们称B
是A
的逆矩阵,而A
则被称为可逆矩阵。注:E
为单位矩阵。
import numpy as np
a=np.array([[1,2],[3,4]])
b=np.linalg.inv(a)
print("矩阵a:",'\n',a)
print("矩阵b:",'\n',b)
print(np.dot(a,b))
矩阵a:
[[1 2]
[3 4]]
矩阵b:
[[-2. 1. ]
[ 1.5 -0.5]]
[[1.0000000e+00 0.0000000e+00]
[8.8817842e-16 1.0000000e+00]]
现在可以求解线性方程:
2 x + 2 y + 2 z = 5 2x + 2y + 2z = 5 2x+2y+2z=5
2 y + 4 z = − 3 2y + 4z = -3 2y+4z=−3
2 x + 5 y − 2 z = 26 2x + 5y - 2z = 26 2x+5y−2z=26
A=np.array([[2,2,2],[0,2,4],[2,5,-2]])
B=np.array([[5],[-3],[26]])
X=np.linalg.solve(A,B)#先传入A(系数矩阵),B(结果矩阵),返回解矩阵X
print("线性方程组的解:\n",X)
a=np.linalg.inv(A)#A 的逆矩阵
X=np.dot(a,B)#X=A^(-1) B
print("线性方程组的解:\n",X)
线性方程组的解:
[[ 1.45]
[ 3.6 ]
[-2.55]]
线性方程组的解:
[[ 1.45]
[ 3.6 ]
[-2.55]]
可以看出两种方法求出的结果是相同的。
更多推荐
所有评论(0)