深度学习全书:公式+推导+代码+TensorFlow全程案例
上QQ阅读APP看书,第一时间看更新

2-2-3 联立方程式求解

在中学阶段,我们通常会以高斯消去法(Gaussian Elimination)解联立方程式。以下列方程式为例:

x+y =16

10x+25y =250

将第一个方程式两边乘以-10,加上第二个方程式,即可消去x,变成

−10(x+y)=−10(16)

10x+25y=250

简化为

15y=90

得到y=6,再代入任一方程式,得到x=10。

以上过程,如果以线性代数求解就简单多了。

(1)以矩阵表示:A为方程式中未知数(x, y)的系数,B为等号右边的常数且AX = B

(2)其中,则X = A-1 B。证明如下:

①两边各乘A-1

A-1AX = A-1 B

A-1A等于单位矩阵,且任一矩阵乘以单位矩阵,还是等于原矩阵,故

X = A-1 B

③以上式求得(x, y)。注意:前提是A须为非奇异矩阵。

以下程序均收录在02_03_联立方程式求解.ipynb。

(1)以NumPy库求解上述联立方程式。程序代码如下:

①inv(A):A的反矩阵。

②执行结果:x=10,y=6。

③也可以直接使用np.linalg.solve()函数求解。程序代码如下:

(2)画图,交叉点即联立方程式的解。程序代码如下:

执行结果:如图2.8所示。

图2.8 交叉点即联立方程式的解

(3)以NumPy库求解下列联立方程式。

−1x+3y =−72

3x+4y−4z=−4

−20x−12y+5z =−50

程序代码如下:

①执行结果:(x, y, z)=(12, -20, -10)。

②也可以使用SymPy库求解,直接将联立方程式整理在等号左边,使用solve()函数,参数内的多项式均假设等号(=)右边为0。