![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=1739474624-K45mGrkZzGHw8m4rPZk3UUTHKyN9a1Cj-0-d3ab7b718aa53ffca70bc9f823bf8052)
将上述3个方程反映在二维直角坐标系中,如图3.3所示。
![](https://epubservercos.yuewen.com/507925/23721665909549406/epubprivate/OEBPS/Images/Figure-P59_4909.jpg?sign=1739474624-3DSzHSneFrLtabdMMqAZCUBgzbpazh4E-0-3a11ef7d913bcb2fcb9d38c52c2ad02c)
图3.3 3个函数的坐标图
由图3.3可以看出这3条直线没有共同交点,因此无法直接求出该方程组的解。此时,可以通过最小二乘逼近找出一个与3条直线距离最近的一个点。
首先,通过矩阵和向量的形式来表示上述方程组方程的表达式为Ax+b=y。
![](https://epubservercos.yuewen.com/507925/23721665909549406/epubprivate/OEBPS/Images/Figure-P59_15389.jpg?sign=1739474624-ObFfMRqCLhsV8qUgn4VWVTAKRk43uf3S-0-127e46b6740e5e47b0efc98b4e27aa12)
上述表达式的最小二乘逼近如下所示:
![](https://epubservercos.yuewen.com/507925/23721665909549406/epubprivate/OEBPS/Images/Figure-P59_15391.jpg?sign=1739474624-zP5VGtKXAQCLr7AYSRU8mSZUVd17YUam-0-c32e33e5a10e35eca517707f19995d90)
根据二阶方程的性质对矩阵求逆,结果为
,代入上式可得:
![](https://epubservercos.yuewen.com/507925/23721665909549406/epubprivate/OEBPS/Images/Figure-P59_15395.jpg?sign=1739474624-CF3Jtkv7reKLtPgJt39lMbdjpIBLZInW-0-8852f24658c48392dcb805986ef4314b)
最终,求得矩阵的近似解为,如图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=1739474624-YEogMe0syqaNJfCsHa0fODIKACkyKVcm-0-52d160c6b0ec0267b030bfa6456d358f)
图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的奇异值为。