首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >需要使用chebyshev多项式基来拟合多项式

需要使用chebyshev多项式基来拟合多项式
EN

Stack Overflow用户
提问于 2012-08-17 02:59:47
回答 2查看 14.6K关注 0票数 10

我一直在使用matlab中的polyfit函数对数据拟合线性最小二乘多项式。据我所知,这使用了标准多项式基数(单项式基数)。我读到过使用Chebyshev多项式基来拟合会导致更大的数值稳定性,所以我想这样做。matlab有这个选项吗?

EN

Stack Overflow用户

发布于 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多项式拟合:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
b = A \ y

这里你必须记住的是,当你评估你的近似值时,在评估它之前,你必须将这个值映射到-1,1的区间。系数仅在您为近似提供的x的初始范围内有效。您将无法评估超出初始x范围的近似值(在有效意义上)。如果要这样做,您应该使用比数据更宽间隔,这样,当您使用变换将点映射到内部点时,您的点将始终位于-1,1中,因此对您的近似值的评估是有效的。

我已经有一段时间没有使用matlab了,所以新版本实际上可能有一个内置的函数,可以为你完成所有这些工作。这不是我上次使用它时的情况,如果所有其他方法都失败了,上面的方法将允许您使用chebyshev基(第一种)生成最小二乘多项式逼近。

票数 15
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11993722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档