上QQ阅读APP看书,第一时间看更新
3.2.4 实例:求解方程组
设,已知下列3个方程,对该方程组进行求解。
将上述3个方程反映在二维直角坐标系中,如图3.3所示。
图3.3 3个函数的坐标图
由图3.3可以看出这3条直线没有共同交点,因此无法直接求出该方程组的解。此时,可以通过最小二乘逼近找出一个与3条直线距离最近的一个点。
首先,通过矩阵和向量的形式来表示上述方程组方程的表达式为Ax+b=y。
上述表达式的最小二乘逼近如下所示:
根据二阶方程的性质对矩阵求逆,结果为,代入上式可得:
最终,求得矩阵的近似解为,如图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)
图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的奇异值为。