【发布时间】:2012-08-13 04:33:10
【问题描述】:
我一直在使用 matlab 中的 polyfit 函数对数据进行线性最小二乘多项式拟合。根据我的阅读,这使用标准多项式基础(单项式基础)。我已经读过使用切比雪夫多项式基础进行拟合会导致更大的数值稳定性,所以我想这样做。 matlab有这个选项吗?
【问题讨论】:
标签: matlab curve-fitting polynomial-math least-squares
我一直在使用 matlab 中的 polyfit 函数对数据进行线性最小二乘多项式拟合。根据我的阅读,这使用标准多项式基础(单项式基础)。我已经读过使用切比雪夫多项式基础进行拟合会导致更大的数值稳定性,所以我想这样做。 matlab有这个选项吗?
【问题讨论】:
标签: matlab curve-fitting polynomial-math least-squares
我在这里假设您需要第一类切比雪夫多项式。据我所知,Matlab 没有这个内置的。不过,自己编写代码很容易。 Chebyshev 多项式仅在 [-1,1] 上定义,因此首先您必须将 x 数据映射到此范围。然后使用递推关系生成切比雪夫多项式http://en.wikipedia.org/wiki/Chebyshev_polynomials#Definition
T_(n+1)(x) = 2xT_(n)x - T_(n-1)(x)
如果x 是您的横坐标并且y 您的数据点生成您的观察矩阵A(这等效于单项式的范德蒙德矩阵)度数n 多项式拟合使用:
n = degree;
m = length(x);
%% Generate the z variable as a mapping of your x data range into the
%% interval [-1,1]
z = ((x-min(x))-(max(x)-x))/(max(x)-min(x));
A(:,1) = ones(m,1);
if n > 1
A(:,2) = z;
end
if n > 2
for k = 3:n+1
A(:,k) = 2*z.*A(:,k-1) - A(:,k-2); %% recurrence relation
end
end
然后您可以使用矩阵除法为您的解决方案参数(近似系数)b 求解线性系统
b = A \ y
您必须记住的是,当您评估近似值时,您必须先将值映射到区间 [-1,1],然后再评估它。这些系数仅在您为近似值提供的x 的初始范围内有效。您将无法评估初始 x 范围之外的近似值(在有效意义上)。如果你想这样做,你应该使用比你的数据更宽的间隔,这样当你使用变换将点内部映射到那个时,你的点将始终位于 [-1,1] 中,因此对近似值的评估是有效的.
我已经有一段时间没有使用 matlab 了,所以新版本实际上可能有一个内置函数可以为您完成所有这些工作。我上次使用它时不是这种情况,如果所有其他方法都失败了,上面将允许您使用切比雪夫基础(第一类)生成最小二乘多项式近似
【讨论】: