from sympy import Matrix
from scipy.linalg import lstsq
import numpy as np
# A = Matrix([[2,3],[1,3],[1,1]])
# b = Matrix([5,3,2]).T # 矩阵有行列之分
# A = np.array([[2,3],[1,3],[1,1]])
# b = np.array([5,3,2]).T # 一维数组没有行列之分
A = np.matrix([[2,3],[1,3],[1,1]])
b = np.matrix([5,3,2]).T # 矩阵有行列之分
x = lstsq(A, b)
print x
"""
最小二乘法lstsq是在numpy中定义的,scipy中用的也是numpy的;
系数A和值b,只能是np.array或np.matrix类型, sympy.Matrix类型不能作为lstsq()的输入参数;
lstsq()返回值类型如下:
x = (array([[ 1.78571429],[ 0.42857143]]),
array([[ 0.07142857]]),
2,
array([ 4.94235374, 0.75705981]))
第一个元素:基于最小二乘法得到超定方程组的近似解 x=1.78571429,y=0.42857143.
第二个元素:残差的总和
第三个元素:系数矩阵A的秩
第四个元素:系数矩阵A的奇异值
"""