在Python-NumPy中获取切比雪夫数列对数据的最小二乘法拟合
在这篇文章中,我们将介绍如何在Python中获得切比雪夫序列对数据的最小二乘拟合。
chebyshev.chebfit 方法
NumPy库为我们提供了numpy.polynomial.chebyshev.chebfit()方法,以获得python中Chebyshev数列对数据的最小平方拟合。该方法返回切比雪夫数列的系数,该数列是对数据值y在位置x处的最佳拟合(最小平方拟合),如果y是一维的,返回的系数也是一维的。如果y是二维的,则进行多次拟合,每一列y都要进行拟合,系数被放在二维返回的相应列中。
拟合的多项式的形式为:。
p(x) = C0+ C1.T1(x)+........+Cn.Tn(x)
语法: polynomial.chebyshev.chebfit(x, y, deg, full=False)
参数:
- x:x坐标点
- y:y坐标点
- deg: 拟合多项式的度数。
- full: bool, (可选) 开关决定返回值的性质。当它为False(默认)时,只返回系数。
返回:最小二乘法拟合中的系数矩阵。
[residuals, rank, singular_values, rcond]:
如果full == True,就会返回这些值。
- residuals–最小二乘法拟合的平方残差总和。
- rank – 按比例的范德蒙德矩阵的数字等级。
- singular_values – 缩放的范德蒙德矩阵的奇异值。
- rcond – rcond的值。
示例 1:
在这里,我们将使用np.linspace()为x坐标和y坐标函数创建一个NumPy数组。之后用numpy.polynomial.chebyshev.chebfit()方法来寻找Chebyshev序列的最小二乘拟合。这个方法只有在完整参数设置为true时才会返回系数和统计量。统计量包含残差、等级、奇异值和rcond。
# import packages
import numpy as np
from numpy.polynomial import chebyshev as C
# X- coordinate
x = np.linspace(0, 1, 25)
print(x)
# y - coordinate computed from x-coordinate
y = x**3 - x**2 + np.random.randn(len(x))
print(y)
# least square fit of chebyshev series
c, stats = C.chebfit(x, y, 2, full=True)
print('coefficients are :'+str(c))
print('residuals '+str(stats[0]))
print('rank :'+str(stats[1]))
print('singular_values :'+str(stats[2]))
print('rcond: '+str(stats[3]))
输出:
[0. 0.04166667 0.08333333 0.125 0.16666667 0.20833333
0.25 0.29166667 0.33333333 0.375 0.41666667 0.45833333
0.5 0.54166667 0.58333333 0.625 0.66666667 0.70833333
0.75 0.79166667 0.83333333 0.875 0.91666667 0.95833333
1\. ]
[ 0.37409044 -0.08380424 -0.86646175 0.03529103 -0.51223158 -0.82765727
-1.30289843 0.06483149 0.00468366 -0.94344187 0.79565795 0.4189812
1.11198273 -1.82178502 -1.34997261 -1.4128537 -0.07464673 0.15374686
0.48787202 -0.46500345 -0.8149045 1.49261006 -1.94050386 -0.41054362
0.20983018]
coefficients are :[ 0.17746311 -0.73510349 0.36625023]
residuals [18.52977625]
rank :3
singular_values :[1.39668318 1.02095653 0.08320976]
rcond: 5.551115123125783e-15
示例 2:
在这个例子中,参数full被设置为false。当它为false时,不返回统计数据,只返回系数。
# import packages
import numpy as np
from numpy.polynomial import chebyshev as C
# X- coordinate
x = np.linspace(0, 1, 25)
print(x)
# y - coordinate computed from x-coordinate
y = x**3 - x**2 + np.random.randn(len(x))
print(y)
# least square fit of chebyshev series
c = C.chebfit(x, y, 2, full=False)
print('coefficients are :'+str(c))
输出:
[0. 0.04166667 0.08333333 0.125 0.16666667 0.20833333
0.25 0.29166667 0.33333333 0.375 0.41666667 0.45833333
0.5 0.54166667 0.58333333 0.625 0.66666667 0.70833333
0.75 0.79166667 0.83333333 0.875 0.91666667 0.95833333
1\. ]
[ 1.43124921 0.704068 0.87329216 -1.89762515 -1.00132009 -0.07043263
-0.52919039 -0.35211855 0.16805591 0.21070363 -0.54878338 -0.05096546
-1.86555805 -0.35063789 -2.46754197 -0.7162462 0.21864938 -0.25926418
-1.39237896 1.49328312 0.04526993 -0.76624966 -1.36429022 -0.16418669
-1.05438407]
coefficients are :[ 1.94042826 -3.72505731 1.45929506]