Python快乐编程:人工智能深度学习基础
上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的奇异值为