罗兰关于MATLAB的艺术gydF4y2Ba

将想法转化为MATLABgydF4y2Ba

插值多项式gydF4y2Ba

约翰D 'ErricogydF4y2Ba今天回来讲插值多项式。gydF4y2Ba

内容gydF4y2Ba

介绍gydF4y2Ba

我在我的gydF4y2Ba上一篇博文gydF4y2Ba关于多项式回归模型。我们在多项式模型中看到了一些效用,增加多项式的阶数会导致误差减小。我们能走多远?我们能把误差减少到零吗?gydF4y2Ba

在某些情况下,我可能会选择将多项式的次数增加到比数据点数量少1的程度。假设我的数据没有复制点,这是一个gydF4y2Ba插值多项式gydF4y2Ba这与我们的数据完全吻合,至少在我们计算的双重精度范围内。一条直线可以经过任意两点,二次曲线可以经过三点,三次曲线可以正好碰到四点,等等。如果你更喜欢用统计自由度来思考,如果你有gydF4y2BangydF4y2Ba点,一个多项式的阶gydF4y2BangydF4y2Ba1 (gydF4y2BangydF4y2Ba系数)通过您的数据精确。gydF4y2Ba

我从最小二乘意义上的多项式建模开始讲起,或者说是回归分析。但实际上,我想讨论的是插值,而不是多项式回归提供的近似。也许这是一种间接的方法,但我认为重要的一点是将插值与数学中使用的更一般的建模/曲线拟合工具区分开来。许多MATLAB用户往往没有意识到这种差异。gydF4y2Ba

我们先从指数函数中取样5个点。gydF4y2Ba

格式gydF4y2Ba短gydF4y2Bax =(2:1:2)”;y = exp (x);情节(x, y,gydF4y2Ba“o”gydF4y2Ba网格)gydF4y2Ba在gydF4y2Ba

完全符合gydF4y2Ba

虽然这是真的gydF4y2BapolyfitgydF4y2Ba与指令完全吻合gydF4y2Ban - 1gydF4y2Ba多项式法,直接法效率更高。gydF4y2Ba

建立一个插值多项式使用gydF4y2Ba范德gydF4y2Ba加上使用gydF4y2Ba反斜杠gydF4y2Ba.gydF4y2Ba

P = vander(x)\y xev = linspace(-2, 2500)';yev = polyval (P, xev);情节(x, y,gydF4y2Ba“柯”gydF4y2Baxev yev,gydF4y2Ba的r -gydF4y2Ba网格)gydF4y2Ba在gydF4y2Ba标题(gydF4y2Ba“四次多项式通过5点经验(x)”gydF4y2Ba)gydF4y2Ba
P = 0.0492 0.2127 0.4939 0.9625 1.0000gydF4y2Ba

许多书教你如何使用gydF4y2Ba拉格朗日形式gydF4y2Ba插值。这里我就不讲了因为我不建议大家一般使用多项式。gydF4y2Ba

插值应在数据点上产生零残差gydF4y2Ba

验证残差在数据点上基本上为零。gydF4y2Ba

格式gydF4y2Ba长gydF4y2BaggydF4y2Bapred = polyval(P,x) - ygydF4y2Ba
Pred = -1.11022302462516e-016 -1.11022302462516e-016 0 0 0gydF4y2Ba

数据是否有副本?gydF4y2Ba

假设我有两个独立变量值相同的点,但因变量值不同?因为对于任何给定的gydF4y2BaxgydF4y2Ba,单值函数只返回预测的单个值gydF4y2Ba必须gydF4y2Ba造成一个问题。在这个例子中,我应该期望插值什么值gydF4y2Bax = 2gydF4y2Ba?应该gydF4y2Baf (x)gydF4y2Ba是gydF4y2Ba3.gydF4y2Ba或gydF4y2Ba4gydF4y2Ba?gydF4y2Ba

X = [0 1 2 2 3 4]';Y = [1 2 3 4 5 6]';情节(x, y,gydF4y2Ba“o”gydF4y2Ba)gydF4y2Ba

如果你看一下Vandermonde矩阵的秩,你就会发现问题的一个线索。秩应该是6,但是复制点引起了奇点。gydF4y2Ba

排名(范德(x))gydF4y2Ba
ans = 5gydF4y2Ba

这种奇异性导致了一个无用的多项式。gydF4y2Ba

P =范德(x) \ ygydF4y2Ba
警告:矩阵的工作精度是单一的。P = NaN NaN -Inf Inf 1gydF4y2Ba

平均的复制gydF4y2Ba

如果数据确实不是单值的,常用的方法是使用参数关系。(这是为将来可能的博客存起来的东西。)gydF4y2Ba

然而,大多数时候,我只想做一些简单的事情,比如平均复制点。gydF4y2Ba集运商gydF4y2Ba,我贡献给File Exchange的一个工具,就可以做到这一点。如果您从未找到或看过文件交换,请花些时间浏览一下那里的伟大工具。gydF4y2Ba

高阶多项式不是一个确定的赌注gydF4y2Ba

有时多项式做得不是很好。了解你的数据,了解你的问题是很重要的。这里的数据来自一个已知单调递增的函数。多项式不喜欢单调,所以强迫一个高阶多项式来插值这样的函数肯定会失败。gydF4y2Ba

x =(5:1:5)”;y =小块土地(x);P = vander(x)\y xev = linspace(-5,5,1000)';yev = polyval (P, xev);情节(x, y,gydF4y2Ba“柯”gydF4y2Baxev yev,gydF4y2Ba的r -gydF4y2Ba网格)gydF4y2Ba在gydF4y2Ba标题(gydF4y2Baerf(x)上11个点的插值多项式gydF4y2Ba)gydF4y2Ba
P = 3.49245965480804e-020 2.0991424886728e-005 -1.58112816820803e-018 -0.00119783140998794 2.17562811018059e-017 0.0239521737329468 -9.91270557701033e-017 -0.211403900317105 1.03132935951897 0gydF4y2Ba

龙格现象gydF4y2Ba

龙格gydF4y2Ba发现这个函数的例子,导致高阶插值多项式非常糟糕。gydF4y2Ba

x =(5:1:5)”;y = 1. / (1 + x ^ 2);P = vander(x)\y xev = linspace(-5,5,1000)';yev = polyval (P, xev);ytrue = 1. / (1 + xev。^ 2);情节(x, y,gydF4y2Ba“柯”gydF4y2Baxev yev,gydF4y2Bar -。gydF4y2Baxev ytrue,gydF4y2Ba“g -”gydF4y2Ba)传说(gydF4y2Ba的数据点gydF4y2Ba,gydF4y2Ba插值多项式的gydF4y2Ba,gydF4y2Ba“y = 1. / (1 + x ^ 2)。”gydF4y2Ba网格)gydF4y2Ba在gydF4y2Ba标题(gydF4y2Ba“龙格例子”gydF4y2Ba)gydF4y2Ba
P = - 2.2624434389e -005 1.04238735515992e-019 0.00126696832579186 -4.47734652027112e-018 -0.0244117647058824 5.61044648135202e-017 0.19737556561086 -2.38551402729053e-016 - 0.6742081479638 1.38777878078145e-016gydF4y2Ba

数值问题gydF4y2Ba

你还需要担心高次多项式插值的数值问题。你要创建的矩阵通常是数值奇异的。gydF4y2Ba

例如,矩阵的秩gydF4y2Ba范德(1:n)gydF4y2Ba应该是gydF4y2BangydF4y2Ba.然而,当使用有限精度的算法时,这就失败了。gydF4y2Ba

排名(vander(1:10))排名(范德(1:20))排名(范德(1:30))gydF4y2Ba
Ans = 10 Ans = 7 Ans = 6gydF4y2Ba

集中和缩放数据可以在一定程度上提高高阶多项式的数值性能,但这也有限制。使用其他插值方法通常会更好。gydF4y2Ba

你会做什么?你希望能够插入你的数据。多项式似乎是一个很好的研究方向,但它们有自己的问题。高阶多项式插值通常存在问题,导致非单调插值或数值问题。你可以考虑其他的函数族来构建你的插值,例如三角函数或贝塞尔函数,或正交多项式。这很大程度上取决于您想要建模的关系。知道你的问题!gydF4y2Ba

顺便说一下,对于那些对建模和曲线拟合方法感兴趣的人,我在这里列出了一些想法gydF4y2Ba线程gydF4y2Ba这应该很有趣。gydF4y2Ba

我们仍然可以用多项式做很多事情。它们构成了许多建模工具的基础。gydF4y2Ba

一个不错的技巧就是简单。为什么要用一个高次多项式来插值我们的数据?相反,将问题分解,使用更小的低阶多项式片段,拼接在一起。在下一篇博客中,我将开始讨论这些分段插值。在那之前,请告诉我gydF4y2Ba在这里gydF4y2Ba你发现了插值多项式的使用,或者你发现了它们不能解决的问题。gydF4y2Ba




MATLAB®7.6发布gydF4y2Ba

|gydF4y2Ba
  • 打印gydF4y2Ba
  • 发送电子邮件gydF4y2Ba

评论gydF4y2Ba

要留下评论,请点击gydF4y2Ba在这里gydF4y2Ba登录到您的MathWorks帐户或创建一个新帐户。gydF4y2Ba