我已经使用matlab中的polyfit
函数将线性最小二乘多项式拟合到数据中。从我读到的,这使用标准多项式基础(单项式基础)。我已经读过使用切比雪夫多项式基础来拟合导致更大的数值稳定性所以我想这样做。 matlab有这个选项吗?
答案 0 :(得分:12)
我在这里假设你想要第一种切比雪夫多项式。据我所知,Matlab没有这个内置。虽然很容易编码自己。切比雪夫多项式仅在[-1,1]上定义,因此首先必须将x数据映射到此范围。然后使用递归关系生成Chebyshev多项式http://en.wikipedia.org/wiki/Chebyshev_polynomials#Definition
T_(n + 1)(x)= 2xT_(n)x - T_(n-1)(x)
如果x
是您的横坐标,而y
您的数据点会生成您的观察矩阵A
(这相当于单项式基础的Vandermonde矩阵){{1}多项式拟合使用:
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
您需要记住的是,在评估近似值时,必须在评估之前将值映射到区间[-1,1]。系数仅在您为近似值提供的b = A \ y
的初始范围内有效。您将无法在初始x
范围之外评估近似值(在有效意义上)。如果你想这样做你应该使用比你的数据更宽的间隔,那么当你使用变换将内部点映射到内部时,你的点总是位于[-1,1]中,因此你的近似值的评估是有效的
我还没有使用matlab一段时间,所以新版本实际上可能有一个内置函数,可以为你完成所有这些。当我上次使用它时并非如此,如果所有其他方法都失败,则上面将允许您使用chebyshev(第一类)生成最小二乘多项式近似
答案 1 :(得分:5)