【问题标题】:Need to fit polynomial using chebyshev polynomial basis需要使用切比雪夫多项式基础拟合多项式
【发布时间】:2012-08-13 04:33:10
【问题描述】:

我一直在使用 matlab 中的 polyfit 函数对数据进行线性最小二乘多项式拟合。根据我的阅读,这使用标准多项式基础(单项式基础)。我已经读过使用切比雪夫多项式基础进行拟合会导致更大的数值稳定性,所以我想这样做。 matlab有这个选项吗?

【问题讨论】:

    标签: matlab curve-fitting polynomial-math least-squares


    【解决方案1】:

    我在这里假设您需要第一类切比雪夫多项式。据我所知,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 了,所以新版本实际上可能有一个内置函数可以为您完成所有这些工作。我上次使用它时不是这种情况,如果所有其他方法都失败了,上面将允许您使用切比雪夫基础(第一类)生成最小二乘多项式近似

    【讨论】:

      【解决方案2】:

      我认为您正在寻找Chebfun 工具箱。它使用 Chebychev 点和 Chebychev 插值重载 polyfit 函数等。

      除上述内容外,您始终可以自己编写代码。这并不难。编辑:参见 mathematician1975 的帖子 :)。 EDIT2:更新了 chebfun 网站。

      【讨论】:

      • 感谢您的回答。这个工具箱看起来确实很有用,而且还有一些其他有用的功能。我还没有真正尝试过,但文档表明它可能真的很有用
      • 请注意,chebfun 不使用最小二乘多项式,而是使用所有点的插值。
      猜你喜欢
      • 2020-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      相关资源
      最近更新 更多