![Python快乐编程:人工智能深度学习基础](https://wfqqreader-1252317822.image.myqcloud.com/cover/181/44510181/b_44510181.jpg)
上QQ阅读APP看书,第一时间看更新
3.2.4 实例:求解方程组
设,已知下列3个方程,对该方程组进行求解。
![](https://epubservercos.yuewen.com/507925/23721665909549406/epubprivate/OEBPS/Images/Figure-P58_15388.jpg?sign=1739296915-vywr3Z2OQ85Y6hxct8n84cQzOFsjGsPH-0-a329e4fb862d1df18065b3e9ea24e4ba)
将上述3个方程反映在二维直角坐标系中,如图3.3所示。
![](https://epubservercos.yuewen.com/507925/23721665909549406/epubprivate/OEBPS/Images/Figure-P59_4909.jpg?sign=1739296915-r43xNMlNWqSnP4pNowSPxgnf1TEzwyar-0-260a459f93fffd68d8b8b66389f75a70)
图3.3 3个函数的坐标图
由图3.3可以看出这3条直线没有共同交点,因此无法直接求出该方程组的解。此时,可以通过最小二乘逼近找出一个与3条直线距离最近的一个点。
首先,通过矩阵和向量的形式来表示上述方程组方程的表达式为Ax+b=y。
![](https://epubservercos.yuewen.com/507925/23721665909549406/epubprivate/OEBPS/Images/Figure-P59_15389.jpg?sign=1739296915-cgZr01cVpuvKw763UHWSaRPCLWYXrOuD-0-845470d9765b1657c8e3e909495ee600)
上述表达式的最小二乘逼近如下所示:
![](https://epubservercos.yuewen.com/507925/23721665909549406/epubprivate/OEBPS/Images/Figure-P59_15391.jpg?sign=1739296915-bdgtSCGdykI9mA28cTo5mvgrt2BLLv9U-0-1960f07d06501d4441b3f1e93fffc9a3)
根据二阶方程的性质对矩阵求逆,结果为
,代入上式可得:
![](https://epubservercos.yuewen.com/507925/23721665909549406/epubprivate/OEBPS/Images/Figure-P59_15395.jpg?sign=1739296915-J4cMEEhpnIANpQMeNvmmS9Nhg6a1vY5h-0-6ac16d494c6dbc341a0d22afe6a85fba)
最终,求得矩阵的近似解为,如图3.4所示。
接下来,通过numpy.linalg.lstsq()函数在Python中实现最小二乘逼近的求解,实现代码如下所示:
import numpy A = numpy.array([[1,1],[1,-1],[0,1]]) B = numpy.array([3,-2,1]) x = numpy.linalg.lstsq(A,B) print(x)
![](https://epubservercos.yuewen.com/507925/23721665909549406/epubprivate/OEBPS/Images/Figure-P60_12595.jpg?sign=1739296915-lLDflg05zu5xKofKUKlxYisEtPn1ErEL-0-3eedf244ed03a08557daba36524d1810)
图3.4 矩阵的近似解
运行结果如下:
(array([0.5,2.0]),array([1.5]),2,array([1.73205081,1.41421356]))
在上述运行结果中,函数返回的4个值,从左往右分别对应以下内容:
(1)最小二乘逼近解。如果B为二维,则逼近的结果存在多个列,每一列对应一个逼近解。上述示例中,逼近解为。
(2)残差。即每一个B-Ax的长度的平方。在上述示例中,残差值为1.5。
(3)矩阵A的秩。上述示例中,矩阵A的秩为2。
(4)矩阵A的奇异值。上述示例中,矩阵A的奇异值为。