- Python快乐编程:人工智能深度学习基础
- 千锋教育高教产品研发部编著
- 448字
- 2025-02-16 10:34:01
3.2.4 实例:求解方程组
设,已知下列3个方程,对该方程组进行求解。
![](https://epubservercos.yuewen.com/507925/23721665909549406/epubprivate/OEBPS/Images/Figure-P58_15388.jpg?sign=1739989603-wbm0CCjKIpeW0zitnql5LecP0ufDyJcm-0-b18815537cb5b5c7b5bbbfd450348821)
将上述3个方程反映在二维直角坐标系中,如图3.3所示。
![](https://epubservercos.yuewen.com/507925/23721665909549406/epubprivate/OEBPS/Images/Figure-P59_4909.jpg?sign=1739989603-zO5EMad5HzaTLFWXnCrkvfGfi1Cpsvvf-0-6d4d2f98df396cd7d558178697ab8b03)
图3.3 3个函数的坐标图
由图3.3可以看出这3条直线没有共同交点,因此无法直接求出该方程组的解。此时,可以通过最小二乘逼近找出一个与3条直线距离最近的一个点。
首先,通过矩阵和向量的形式来表示上述方程组方程的表达式为Ax+b=y。
![](https://epubservercos.yuewen.com/507925/23721665909549406/epubprivate/OEBPS/Images/Figure-P59_15389.jpg?sign=1739989603-XSIyvHJmUHImRj9itUmgChyGxXgDDF03-0-4225897f1fb64df8232bb01cb8d6de73)
上述表达式的最小二乘逼近如下所示:
![](https://epubservercos.yuewen.com/507925/23721665909549406/epubprivate/OEBPS/Images/Figure-P59_15391.jpg?sign=1739989603-jhAWg6MCLmSqkgTFDiYTRTv08qDbG7AF-0-5be5821dc05fff9fb53bc7092dbbe5c4)
根据二阶方程的性质对矩阵求逆,结果为
,代入上式可得:
![](https://epubservercos.yuewen.com/507925/23721665909549406/epubprivate/OEBPS/Images/Figure-P59_15395.jpg?sign=1739989603-0bKy5jMH5ZbX7V40LCaWuKTZYjBlHCtW-0-52d390b93f2de6943e5c39e37b62178c)
最终,求得矩阵的近似解为,如图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=1739989603-3yex4xkuZdDv4NBIHcuETW5TQ77tOf7u-0-5cabc20ac5e54804f501fd5cef8c5bcf)
图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的奇异值为。