polyfit
我一直在使用 matlab中的函数将线性最小二乘多项式拟合到数据中。根据我的阅读,这使用标准多项式基础(单项式基础)。我已经读过使用切比雪夫多项式基础进行拟合会导致更大的数值稳定性,所以我想这样做。matlab有这个选项吗?
2 回答
我将在这里假设您想要第一类切比雪夫多项式。据我所知,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
(这相当于单项式的 Vandermonde 矩阵),用于一次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 了,所以新版本实际上可能有一个内置函数可以为你完成所有这些工作。我上次使用它时不是这种情况,如果所有其他方法都失败了,上面将允许您使用切比雪夫基础(第一类)生成最小二乘多项式近似值
我认为您正在寻找Chebfun工具箱。除其他外,它使用 Chebychev 点和 Chebychev 插值重载polyfit函数。
除了上述内容,您始终可以自己编写代码。这并不难。编辑:参见 mathematician1975 的帖子 :)。EDIT2:更新了 chebfun 网站。