numpy的linalg模块中solve函数解可逆系数矩阵的线性方程组。该函数的调用接口为
solve(A, b)
text{solve(A, b)}
solve(A, b)
参数A表示系数矩阵
A
boldsymbol{A}
A,b表示常数矩阵
b
boldsymbol{b}
b。若A表示的系数矩阵可逆,返回方程组
A
x
=
b
boldsymbol{Ax}=boldsymbol{b}
Ax=b的解,否则报错。
例1 下图中(a)表示一电路网络,每条线上标出的数值是电阻,E点接地。向X,Y,Z和U四点通入电流,强度均为
100
100
100安培。求X,Y,Z,U四点处的电位。
解:设定进入X,Y,Z,U四点流向电路的电路为
I
1
I_1
I1,
I
2
I_2
I2,
I
3
I_3
I3,
I
4
I_4
I4,
I
5
I_5
I5,
I
6
I_6
I6,
I
7
I_7
I7,
I
8
I_8
I8(见图中(b))。运用基尔霍夫定律知,
{
I
1
+
I
2
−
I
3
=
100
I
3
+
I
4
−
I
5
=
100
I
5
+
I
6
−
I
7
=
100
I
7
+
I
8
−
I
1
=
100
.
begin{cases} I_1+I_2-I_3=100\I_3+I_4-I_5=100\I_5+I_6-I_7=100\I_7+I_8-I_1=100 end{cases}.
⎩⎪⎪⎪⎨⎪⎪⎪⎧I1+I2−I3=100I3+I4−I5=100I5+I6−I7=100I7+I8−I1=100.
设X,Y,Z,U四点处的电位分别为
V
X
V_X
VX,
V
Y
V_Y
VY,
V
Z
V_Z
VZ,
V
U
V_U
VU。由欧姆定律知
I
=
V
R
I=frac{V}{R}
I=RV,其中I,R,V分别表示电流,电阻,电位。于是,
I
1
=
V
X
−
V
U
I_1=V_X-V_U
I1=VX−VU,
I
2
=
6
V
X
I_2=6V_X
I2=6VX,
I
3
=
2
V
Y
−
2
V
X
I_3=2V_Y-2V_X
I3=2VY−2VX,
I
4
=
7
V
Y
I_4=7V_Y
I4=7VY
I
5
=
3
V
Z
−
3
V
Y
I_5=3V_Z-3V_Y
I5=3VZ−3VY,
I
6
=
8
V
Z
I_6=8V_Z
I6=8VZ,
I
7
=
4
V
U
−
4
V
Z
I_7=4V_U-4V_Z
I7=4VU−4VZ,
I
8
=
5
V
U
I_8=5V_U
I8=5VU
代入电流方程组得
{
9
V
X
−
2
V
Y
−
V
U
=
100
−
2
V
X
+
12
V
Y
−
3
V
Z
=
100
−
3
V
Y
+
15
V
Z
−
4
V
U
=
100
−
V
X
−
4
V
Z
+
10
V
U
=
100
.
begin{cases} quad9V_X-2V_Yquadquadquad-V_U=100\-2V_X+12V_Y-3V_Zquadquadquad=100\quadquadquad-3V_Y+15V_Z-4V_U=100\-V_Xquadquadquadquad-4V_Z+10V_U=100 end{cases}.
⎩⎪⎪⎪⎨⎪⎪⎪⎧9VX−2VY−VU=100−2VX+12VY−3VZ=100−3VY+15VZ−4VU=100−VX−4VZ+10VU=100.
该方程组的系数矩阵为
A
=
(
9
−
2
0
−
1
−
2
12
−
3
0
0
−
3
15
−
4
−
1
0
−
4
10
)
boldsymbol{A}=begin{pmatrix}9&-2&0&-1\-2&12&-3&0\0&-3&15&-4\-1&0&-4&10end{pmatrix}
A=⎝⎜⎜⎛9−20−1−212−300−315−4−10−410⎠⎟⎟⎞,常数矩阵
b
=
(
100
100
100
100
)
boldsymbol{b}=begin{pmatrix}100\100\100\100end{pmatrix}
b=⎝⎜⎜⎛100100100100⎠⎟⎟⎞。用下列代码计算该方程组的解。
import numpy as np #导入numpy
from fractions import Fraction as F #导入Fraction
np.set_printoptions(formatter={'all':lambda x:
str(F(x).limit_denominator())})
A=np.array([[9,-2,0,-1], #系数矩阵A
[-2,12,-3,0],
[0,-3,15,-4],
[-1,0,-4,10]])
b=np.array([100,100,100,100]) #常数矩阵b
X=np.linalg.solve(A, b) #解方程
print(X.reshape(4,1)) #输出解
程序的第5~8行设置方程组的系数矩阵A,第9行设置常数矩阵b,第10行调用numpy.linalg的solve函数,传递参数A和b,计算方程组 A x = b boldsymbol{Ax}=boldsymbol{b} Ax=b的解X。运行程序,输出
[[210100/12907] [188400/12907] [183300/12907] [223400/12907]]
即即X,Y,Z,U四点处电位
V
X
=
210100
12907
V_X=frac{210100}{12907}
VX=12907210100,
V
Y
=
188400
12907
V_Y=frac{188400}{12907}
VY=12907188400,
V
Z
=
183300
12907
V_Z=frac{183300}{12907}
VZ=12907183300,
V
U
=
223400
12907
V_U=frac{223400}{12907}
VU=12907223400。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!



