我一直在使用matlab中的polyfit函数对数据拟合线性最小二乘多项式。据我所知,这使用了标准多项式基数(单项式基数)。我读到过使用Chebyshev多项式基来拟合会导致更大的数值稳定性,所以我想这样做。matlab有这个选项吗?
发布于 2012-08-17 03:47:53
我想您正在寻找Chebfun工具箱。它使用Chebychev点和Chebychev插值重载polyfit函数。
除了上面的代码,你还可以自己编写代码。这并不是那么困难。编辑:参见mathematician1975 :)的帖子。EDIT2:更新了chebfun网站。
发布于 2012-08-17 03:06:00
这里我假设你想要第一类切比雪夫多项式。据我所知,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了,所以新版本实际上可能有一个内置的函数,可以为你完成所有这些工作。这不是我上次使用它时的情况,如果所有其他方法都失败了,上面的方法将允许您使用chebyshev基(第一种)生成最小二乘多项式逼近。
https://stackoverflow.com/questions/11993722
复制相似问题