0、部分笔记来自
基于卫星星历的BDS卫星轨道差值与拟合方法研究及精度分析_李振昌(硕士论文)
一、切比雪夫多项式定义
二、生成切比雪夫多项式
三、使用切比雪夫多项式进行数据拟合的步骤
1. 数据标准化:将数据标准化到区间 [-1, 1],因为切比雪夫多项式在这个区间上定义。
2. 生成切比雪夫多项式矩阵:使用递推关系生成切比雪夫多项式矩阵 ,其中每列对应一个阶数的切比雪夫多项式。
3. 构建最小二乘问题:通过最小二乘法求解多项式系数向量。
4. 预测:使用得到的系数向量和切比雪夫多项式进行预测。
四、代码示例
clear all
close all
clc
% 加载数据
load('str_traj.mat')
times = str_traj.vt_sec(1:22); % 时间序列
X = str_traj.Load_xyzVxyzKm(1:22,1); % X坐标值
Y = str_traj.Load_xyzVxyzKm(1:22,2); % Y坐标值
Z = str_traj.Load_xyzVxyzKm(1:22,3); % Z坐标值
% 将时间标准化到[-1, 1]
t_min = min(times);
t_max = max(times);
times_normalized = 2 * (times - t_min) / (t_max - t_min) - 1;
% 设置切比雪夫多项式的阶数
deg = 22;
% 生成切比雪夫多项式矩阵
T = zeros(length(times), deg + 1);
T(:, 1) = 1; % T0(t) = 1
if deg >= 1
T(:, 2) = times_normalized; % T1(t) = tau
end
for n = 3:deg+1
T(:, n) = 2 * times_normalized .* T(:, n-1) - T(:, n-2);
end
% 构建最小二乘问题
C_x = (T' * T) \ (T' * X);
C_y = (T' * T) \ (T' * Y);
C_z = (T' * T) \ (T' * Z);
% 预测特定时间点的数据
kk = 0;
for t = 10:10:20*60
kk = kk + 1;
tau(kk) = 2 * (t - t_min) / (t_max - t_min) - 1;
tt(kk) = t;
% 计算预测点的切比雪夫多项式值
T_pred = zeros(1, deg + 1);
T_pred(1) = 1; % T0(t) = 1
if deg >= 1
T_pred(2) = tau(kk); % T1(t) = tau
end
for n = 3:deg+1
T_pred(n) = 2 * tau(kk) * T_pred(n-1) - T_pred(n-2);
end
% 计算预测点的坐标
Xpred(kk) = T_pred * C_x;
Ypred(kk) = T_pred * C_y;
Zpred(kk) = T_pred * C_z;
end
% 绘制拟合曲线和原始数据
figure;
subplot(3,1,1);
plot(times, X, 'b.', 'DisplayName', 'Original Data');
hold on
plot(tt, Xpred, 'r.', 'DisplayName', 'Fitted Curve');
title('X Coordinate');
legend;
subplot(3,1,2);
plot(times, Y, 'b.', 'DisplayName', 'Original Data');
hold on
plot(tt, Ypred, 'r.', 'DisplayName', 'Fitted Curve');
title('Y Coordinate');
legend;
subplot(3,1,3);
plot(times, Z, 'b.', 'DisplayName', 'Original Data');
hold on
plot(tt, Zpred, 'r.', 'DisplayName', 'Fitted Curve');
title('Z Coordinate');
legend;
五、总结
切比雪夫多项式是一种强大的工具,适用于数据拟合和逼近问题。通过将时间标准化、生成切比雪夫多项式矩阵、构建最小二乘问题并进行预测,你可以有效地拟合数据并进行预测。上述代码示例提供了一个完整的流程,你可以根据需要进行修改和扩展。