使用最小二乘与勒让德多项式拟合离散数据
1. 准备离散数据
假设我们有以下离散数据集:
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 |
我们想用勒让德多项式拟合这些数据,并通过最小二乘法找到勒让德多项式的系数。
2. 勒让德多项式
勒让德多项式的前几项为:
- P 0 ( x ) = 1 P_0(x) = 1 P0(x)=1
- P 1 ( x ) = x P_1(x) = x P1(x)=x
- P 2 ( x ) = 1 2 ( 3 x 2 − 1 ) P_2(x) = \frac{1}{2}(3x^2 - 1) P2(x)=21(3x2−1)
- P 3 ( x ) = 1 2 ( 5 x 3 − 3 x ) P_3(x) = \frac{1}{2}(5x^3 - 3x) P3(x)=21(5x3−3x)
- P 4 ( x ) = 1 8 ( 35 x 4 − 30 x 2 + 3 ) P_4(x) = \frac{1}{8}(35x^4 - 30x^2 + 3) P4(x)=81(35x4−30x2+3)
3. 最小二乘法拟合
为了拟合勒让德多项式,我们需要使用最小二乘法来找到数据集的最优拟合系数。设我们使用前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 是待求的系数。
4. 构建矩阵并解方程
构建矩阵 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
5. 计算最小二乘解
最小二乘法要求我们解方程:
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
6. PYTHON代码及输出结果
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]
7. 解释结果
- 勒让德多项式的系数 c 0 ≈ 0.795 c_0 \approx 0.795 c0≈0.795, c 1 ≈ 0.065 c_1 \approx 0.065 c1≈0.065, c 2 ≈ − 0.573 c_2 \approx -0.573 c2≈−0.573, c 3 ≈ − 0.063 c_3 \approx -0.063 c3≈−0.063。
- 残差很小,表示拟合的效果较好。
通过最小二乘法拟合了一组离散数据,得到了勒让德多项式的系数。