上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。