假设我们有以下离散数据集:
x x x | y y y |
---|---|
0.0 | 1.0 |
0.5 | 0.8 |
1.0 | 0.5 |
1.5 | 0.2 |
2.0 | -0.1 |
我们想用勒让德多项式拟合这些数据,并通过最小二乘法找到勒让德多项式的系数。
勒让德多项式的前几项为:
为了拟合勒让德多项式,我们需要使用最小二乘法来找到数据集的最优拟合系数。设我们使用前4阶的勒让德多项式,即:
f ( x ) = c 0 P 0 ( x ) + c 1 P 1 ( x ) + c 2 P 2 ( x ) + c 3 P 3 ( x ) f(x) = c_0 P_0(x) + c_1 P_1(x) + c_2 P_2(x) + c_3 P_3(x) f(x)=c0P0(x)+c1P1(x)+c2P2(x)+c3P3(x)
其中 c 0 , c 1 , c 2 , c 3 c_0, c_1, c_2, c_3 c0,c1,c2,c3 是待求的系数。
构建矩阵 A A A,其中每一列是勒让德多项式在数据点 x i x_i xi 处的值:
A = [ P 0 ( 0.0 ) P 1 ( 0.0 ) P 2 ( 0.0 ) P 3 ( 0.0 ) P 0 ( 0.5 ) P 1 ( 0.5 ) P 2 ( 0.5 ) P 3 ( 0.5 ) P 0 ( 1.0 ) P 1 ( 1.0 ) P 2 ( 1.0 ) P 3 ( 1.0 ) P 0 ( 1.5 ) P 1 ( 1.5 ) P 2 ( 1.5 ) P 3 ( 1.5 ) P 0 ( 2.0 ) P 1 ( 2.0 ) P 2 ( 2.0 ) P 3 ( 2.0 ) ] A = \begin{bmatrix} P_0(0.0) & P_1(0.0) & P_2(0.0) & P_3(0.0) \\ P_0(0.5) & P_1(0.5) & P_2(0.5) & P_3(0.5) \\ P_0(1.0) & P_1(1.0) & P_2(1.0) & P_3(1.0) \\ P_0(1.5) & P_1(1.5) & P_2(1.5) & P_3(1.5) \\ P_0(2.0) & P_1(2.0) & P_2(2.0) & P_3(2.0) \end{bmatrix} A= P0(0.0)P0(0.5)P0(1.0)P0(1.5)P0(2.0)P1(0.0)P1(0.5)P1(1.0)P1(1.5)P1(2.0)P2(0.0)P2(0.5)P2(1.0)P2(1.5)P2(2.0)P3(0.0)P3(0.5)P3(1.0)P3(1.5)P3(2.0)
代入勒让德多项式的表达式:
A = [ 1 0.0 − 0.5 0.0 1 0.5 − 0.125 − 0.4375 1 1.0 0.5 − 0.5 1 1.5 1.375 − 0.9375 1 2.0 2.5 − 1.0 ] A = \begin{bmatrix} 1 & 0.0 & -0.5 & 0.0 \\ 1 & 0.5 & -0.125 & -0.4375 \\ 1 & 1.0 & 0.5 & -0.5 \\ 1 & 1.5 & 1.375 & -0.9375 \\ 1 & 2.0 & 2.5 & -1.0 \end{bmatrix} A= 111110.00.51.01.52.0−0.5−0.1250.51.3752.50.0−0.4375−0.5−0.9375−1.0
然后,构建 y y y 向量:
y = [ 1.0 0.8 0.5 0.2 − 0.1 ] y = \begin{bmatrix} 1.0 \\ 0.8 \\ 0.5 \\ 0.2 \\ -0.1 \end{bmatrix} y= 1.00.80.50.2−0.1
最小二乘法要求我们解方程:
A T A c = A T y A^T A c = A^T y ATAc=ATy
其中 c c c 是待求的系数向量:
c = [ c 0 c 1 c 2 c 3 ] c = \begin{bmatrix} c_0 \\ c_1 \\ c_2 \\ c_3 \end{bmatrix} c= c0c1c2c3
import numpy as np
# 定义勒让德多项式的矩阵 A
A = np.array([
[1, 0.0, -0.5, 0.0],
[1, 0.5, -0.125, -0.4375],
[1, 1.0, 0.5, -0.5],
[1, 1.5, 1.375, -0.9375],
[1, 2.0, 2.5, -1.0]
])
# 定义观测的 y 值
y = np.array([1.0, 0.8, 0.5, 0.2, -0.1])
# 使用最小二乘法求解勒让德多项式的系数
c, residuals, rank, s = np.linalg.lstsq(A, y, rcond=None)
# 输出结果
print("勒让德多项式的系数为:", c)
print("残差:", residuals)
得到勒让德多项式的系数为:
勒让德多项式的系数为: [ 0.7952381 0.06507937 -0.57301587 -0.06349206] 残差: [0.00634921]
通过最小二乘法拟合了一组离散数据,得到了勒让德多项式的系数。