use*_*853 8 matlab curve-fitting polynomial-math least-squares
我已经使用polyfitmatlab中的函数将线性最小二乘多项式拟合到数据中.从我读到的,这使用标准多项式基础(单项式基础).我已经读过使用切比雪夫多项式基础来拟合导致更大的数值稳定性所以我想这样做.matlab有这个选项吗?
mat*_*975 13
我在这里假设你想要第一种切比雪夫多项式.据我所知,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矩阵)对于度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
Run Code Online (Sandbox Code Playgroud)
那么你可以b使用矩阵除法求解你的解决方案参数(近似系数)的线性系统
b = A \ y
Run Code Online (Sandbox Code Playgroud)
你必须记住的是,当你评估你的近似值时,你必须在评估之前将值映射到区间[-1,1].系数仅在x您为近似提供的初始范围内有效.您将无法在初始x范围之外评估近似值(在有效意义上).如果你想这样做你应该使用比你的数据更宽的间隔,那么当你使用变换将内部点映射到内部时,你的点总是位于[-1,1]中,因此你的近似值的评估是有效的.
我有一段时间没有使用过matlab,所以新版本实际上可能有一个内置函数可以为你完成所有这些.当我上次使用它时并非如此,如果所有其他方法都失败,上面的内容将允许您使用chebyshev基础生成最小二乘多项式近似(第一类)