线性代数Python计算:解可逆系数矩阵线性方程组

在这里插入图片描述
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+I2I3=100I3+I4I5=100I5+I6I7=100I7+I8I1=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=VXVU 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=2VY2VX 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=3VZ3VY 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=4VU4VZ 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_Y\quad\quad\quad-V_U=100\\-2V_X+12V_Y-3V_Z\quad\quad\quad=100\\\quad\quad\quad-3V_Y+15V_Z-4V_U=100\\-V_X\quad\quad\quad\quad-4V_Z+10V_U=100 \end{cases}. 9VX2VYVU=1002VX+12VY3VZ=1003VY+15VZ4VU=100VX4VZ+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&10\end{pmatrix} A= 9201212300315410410 ,常数矩阵 b = ( 100 100 100 100 ) \boldsymbol{b}=\begin{pmatrix}100\\100\\100\\100\end{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
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
代码诚可贵,原理价更高。若为AI学,读正版书好

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值