查看“︁插值”︁的源代码
←
插值
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{Refimprove|time=2018-03-30}}{{Expand|time=2018-03-30}}[[File:Splined epitrochoid.svg|300px|thumb|一組离散数据點在一個外延的插值。曲線中實際已知数据點是紅色的;連接它們的藍色曲線即為插值。]] 在[[数学]]的[[数值分析]]领域中,'''內插''',或稱'''插值'''({{lang-en|Interpolation}}),是一種通过已知的、[[离散]]的[[数据]]點,在範圍內推求新數據點的过程或方法。求解[[科学]]和[[工程]]的问题時,通常有許多數據點藉由[[采样]]、[[实验]]等方法获得,这些数据可能代表了有限個數值函數,其中自變量的值。而根据这些数据,我们往往希望得到一个[[连续]]的[[函数]](也就是[[曲线]]);或者更密集的[[差分|离散方程]]与已知数据互相吻合,这个过程叫做[[拟合]]。 與插值密切相關的另一個問題是通過簡單函數逼近複雜函數。假設給定函數的公式是已知的,但是太複雜以至於不能有效地進行評估。來自原始函數的一些已知數據點,或許會使用較簡單的函數來產生插值。當然,若使用一個簡單的函數來估計原始數據點時,通常會出現插值[[誤差]];然而,取決於該問題领域和所使用的插值方法,以簡單函數推得的插值數據,可能會比所導致的[[精度]]損失更大。 內插是曲线必须通过已知点的拟合。参见[[拟合]]条目。 例如,已知数据: # <math>x_1=1</math>,<math>y_1=2</math>, # <math>x_2=2</math>,<math>y_2=3</math>, # <math>x_3=4</math>,<math>y_3=6</math>; 求: :当<math>x=3</math>时的y值。 == 定义 == 给定<math>n</math>个离散数据点(称为'''节点''')<math>(x_k, y_k)</math>,<math>k=1,2,...,n</math>。对于<math>x,(x\neq x_k, k=1,2,...n)</math>,求<math>x</math>所对应的<math>y</math>的值称为內插。 <math>f(x)</math>为定义在区间<math>[a,b]</math>上的函数。<math>x_1,x_2,x_3...x_n</math>为<math>[a,b]</math>上n个互不相同的点,<math>G</math>为给定的某一函数类。若<math>G</math>上有函数<math>g(x)</math>满足: <math>g(x_i)=f(x_i),k=1,2,...n</math> 则称<math>g(x)</math>为<math>f(x)</math>关于节点<math>x_1,x_2,x_3...x_n</math>在<math>G</math>上的插值函数。 ==示例== 舉例假設我們有這樣如下列一個表,它給出了某個未知函數<math>f</math>的值 [[File:Interpolation Data.svg|right|thumb|230px|表中數據點在x-y平面上的繪圖。]] {| cellpadding=0 cellspacing=0 |width="20px"| ! <math>x</math> |width="10px"| !colspan=3 align=center| <math>f(x)</math> |- | || 0 || ||align=right| 0 |- | || 1 || ||align=right| 0 || . || 8415 |- | || 2 || ||align=right| 0 || . || 9093 |- | || 3 || ||align=right| 0 || . ||1411 |- | || 4 || ||align=right| −0 || . || 7568 |- | || 5 || ||align=right| −0 || . || 9589 |- | || 6 || ||align=right| −0 || . || 2794 |} 插值提供了估算中間點函數的方法,如<math>x=2.5</math>。 有許多不同的插值方法,其中一些在下面描述。 在選擇適當的算法時需要考慮的一些問題是:方法有多準確? 它的計算成本有多高? 插值有多平滑? 需要多少數據點? {{clear}} == 方法 == ===片段插值=== [[File:Piecewise constant.svg|thumb|right|片段常數(或稱為最近鄰)插值]] 最簡單的插值方法是找到最近的數據值,並分配相同的值。這種方法又稱為最近鄰插值。在簡單的問題中,不太可能使用這種方法,因為線性插值(見下一小節)幾乎一樣容易,但在高維度的多變量插值中,這可能是衡量速度和簡單性的有利選擇。 ===线性插值=== [[File:Interpolation example linear.svg|right|thumb|230px|以線性插值疊加數據的繪圖]] {{Main|线性插值}} 考慮上面估計 ''f''(2.5) 的例子。由於 2.5 在 2 和 3 之間,所以在 ''f''(2) = 0.9093 和 ''f''(3) = 0.1411 之間,取中間的 ''f''(2.5) 是合理的,得到 0.5252。 一般來說,線性插值採用兩個數據點,例如 (''x''<sub>''a''</sub>,''y''<sub>''a''</sub>) 和 (''x''<sub>''b''</sub>,''y''<sub>''b''</sub>), 則線性插值的公式為 :<math> y = y_a + \left( y_b-y_a \right) \frac{x-x_a}{x_b-x_a} \text{ 在 點 } \left( x,y \right) </math> :<math> \frac{y-y_a}{y_b-y_a} = \frac{x-x_a}{x_b-x_a} </math> :<math> \frac{y-y_a}{x-x_a} = \frac{y_b-y_a}{x_b-x_a} </math> 上面公式中的方程式表明,<math>(x_a,y_a)</math>和 <math>(x,y)</math> 的斜率,與 <math>(x_a,y_a)</math> 和 <math> (x_b,y_b)</math> 之間的斜率相同,線性插值是快速簡單的,但不是很精確。另一個缺點是在插值點 ''x''<sub>''k''</sub> 不是[[微分|可微分的]]。 以下誤差估計顯示線性插值不是很精確。用 ''g'' 表示我們要插入的函數,假設 ''x'' 位於 ''x''<sub>''a''</sub> 和 ''x''<sub>''b''</sub>,而 ''g'' 是連續可微的。那麼線性插值的誤差是 :<math> |f(x)-g(x)| \le C(x_b-x_a)^2 \quad\text{where}\quad C = \frac18 \max_{r\in[x_a,x_b]} |g''(r)|. </math> 換言之,誤差與數據點之間的距離的平方成正比。包括多項式插值和样條插值(見下一小節)在內的其他一些方法中的誤差與數據點之間距離的較高冪成正比。這些方法也產生更平滑的插值。 ===多项式插值=== [[File:Interpolation example polynomial.svg|right|thumb|230px|对数据使用多项式插值得到的图像]] {{Main|多项式插值}} [[多項式]]插值是線性插值的推廣。線性插值是一個[[線性|線性函數]]。我們現在用一個更高階的多項式代替這個插值。 再考慮一下上面給出的問題。以下的六次多項式經歷了所有七個點: :<math> f(x) = -0.0001521 x^6 - 0.003130 x^5 + 0.07321 x^4 - 0.3577 x^3 + 0.2255 x^2 + 0.9038 x. </math> <!-- Coefficients are 0, 0.903803333333334, 0.22549749999997, -0.35772291666664, 0.07321458333332, -0.00313041666667, -0.00015208333333. --> 代入 ''x'' = 2.5,我們發現 ''f''(2.5) = 0.5965。 一般情況下,如果我們有 n 個數據點,那麼在所有的數據點中只有一個最多 n-1 次多項式。插值誤差與數據點與冪次 n 之間的距離成正比。此外,插值是一個多項式,因此是無限可微的。所以我們看到多項式插值克服了線性插值的大部分問題。但是,多項式插值也有一些缺點。與線性內插相比,計算內插多項式的成本是昂貴的(參見[[計算複雜性理論|計算複雜度]])。此外,多項式插值可能會出現振盪偽像,特別是在端點(見[[龍格現象]])。 與線性插值不同,多項式插值可以估計樣本範圍之外的局部最大值和最小值。例如,上面的插值在 ''x'' ≈ 1.566 處有一個局部最大值,''f''(''x'') ≈ 1.003,在 ''x'' ≈ 4.708 處有一個局部最小值,''f''(''x'') ≈ −1.003。然而,這些最大值和最小值可能會超出函數的理論範圍 - 例如,一個總是正的函數可能有一個負值的插值,因此它的逆值包含假[[除以零|垂直漸近線]]。 更一般地說,所得曲線的形狀,特別是對於獨立變量的非常高或低的值,可能與常識相反,即與已經產生數據點的實驗系統已知的情況相反。通過使用樣條插值或限制對[[切比雪夫多项式]]的注意可以減少這些缺點。 ===样条曲线插值=== [[File:Interpolation example spline.svg|right|thumb|230px|对数据使用样条插值得到的图像]] {{Main|样条曲线内插}} 線性插值對每個區間 [''x''<sub>''k''</sub>,''x''<sub>''k+1''</sub>] 使用線性函數。 樣條插值在每個間隔中使用低階多項式,並選擇多項式以使它們平滑地吻合在一起。 結果函數被稱為[[样条函数|樣條曲線]]。 例如,[[样条插值#三次样条插值|三次样条]]是分片段立方,兩次連續可微。 此外,它的二階導數在終點為零。 在上表中插入點的三次樣條函數由下式給出 : <math> f(x) = \begin{cases} -0.1522 x^3 + 0.9937 x, & \text{if } x \in [0,1], \\ -0.01258 x^3 - 0.4189 x^2 + 1.4126 x - 0.1396, & \text{if } x \in [1,2], \\ 0.1403 x^3 - 1.3359 x^2 + 3.2467 x - 1.3623, & \text{if } x \in [2,3], \\ 0.1579 x^3 - 1.4945 x^2 + 3.7225 x - 1.8381, & \text{if } x \in [3,4], \\ 0.05375 x^3 -0.2450 x^2 - 1.2756 x + 4.8259, & \text{if } x \in [4,5], \\ -0.1871 x^3 + 3.3673 x^2 - 19.3370 x + 34.9282, & \text{if } x \in [5,6]. \end{cases} </math> 在這種情況下,我們得到 ''f''(2.5) = 0.5972。 與多項式插值的方法相比較,樣條跟多項式一樣,其插值誤差會小於線性插值,而且插值更平滑;使用樣條會比使用高階多項式更容易評估。 它也不會受到龍格現象的影響。 ===三角内插法=== {{Main|三角内插法}} ===有理內插=== {{Main|有理內插}} ===小波內插=== {{Main|小波內插}} == 以高斯過程處理的插值 == {{Main|高斯過程}} 其他形式的插值可以通過選擇不同的插值類來構造。 例如,有理插值是使用Padé逼近的有理函數插值,而三角插值是使用[[傅里叶级数]]的三角多項式插值。 另一種可能是使用小波。 如果數據點的數量是無限的,則可以使用Whittaker-Shannon插值公式。 有時候,我們不僅知道我們想插入的函數的值,而且也知道它的導數。 這導致Hermite插值問題。 當每個數據點本身就是一個函數時,將插值問題看作是每個數據點之間的局部對流問題是有用的。 這個想法導致了運輸理論中使用的位移插值問題。 ==更高維度== ==數位訊號處理的插值== 在数字信号处理领域,'''插值'''是指使用各种数字滤波器(例如带限脉冲信号)提高数字信号(例如语音信号)的采样率(即[[升採樣|升采样]])。在升采样的过程中,原始信号的谐波成分需要在不产生高于原始信号[[奈奎斯特频率]](原始信号采样率的一半)的混叠谐波的情况下保留。Rabiner和Crochiere的书''Multirate Digital Signal Processing''对此进行了讨论。<ref>{{Cite web |url=https://www.amazon.com/Multirate-Digital-Signal-Processing-Crochiere/dp/0136051626 |title=R.E. Crochiere and L.R. Rabiner. (1983). Multirate Digital Signal Processing. Englewood Cliffs, NJ: Prentice–Hall. |access-date=2023-03-15 |archive-date=2016-04-13 |archive-url=https://web.archive.org/web/20160413022201/http://www.amazon.com/Multirate-Digital-Signal-Processing-Crochiere/dp/0136051626 |dead-url=no }}</ref> == 相關概念 == 術語[[外推]]用於找到已知數據點範圍之外的數據點。 在曲線擬合問題中,插值必須準確穿過數據點的約束被放寬。 只需要盡可能接近數據點(在一些其他限制內)。 這需要參數化潛在的插值並且有一些測量誤差的方法。 在最簡單的情況下,這導致[[最小二乘法]]逼近。 近似理論研究如何從某個預定的類別的另一個函數找到給定函數的最佳逼近,以及這個近似值有多好。 這明顯產生了內插函數可以近似未知函數的界限。 == 公式 == 本章内容参考了《[[数学手册]]》<ref>《数学手册》编写组,《[[数学手册]]》,高等教育出版社,1979年</ref>。 * [[牛顿第一內插公式]]([[牛顿向前內插公式]]) * [[牛顿第二內插公式]]([[牛顿向后內插公式]]) * [[斯特林內插公式]] * [[贝塞耳內插公式]] * [[拉格朗日内插多项式]] * [[三次样条内插公式]] * [[埃尔米特內插公式]](Hermite) * [[二元內插公式]] * [[一元三点內插公式]] == 参考文献 == {{Reflist}} == 参见 == {{Portal box|数学}} * [[数值分析]] * [[拟合]] * [[样条]] == 外部連結 == * [http://episte.math.ntu.edu.tw/articles/sm/sm_07_02_1/index.html 談補間法] {{Wayback|url=http://episte.math.ntu.edu.tw/articles/sm/sm_07_02_1/index.html |date=20200702201656 }} * [http://sol.gfxile.net/interpolation/index.html Sol Tutorials - Interpolation Tricks] {{Wayback|url=http://sol.gfxile.net/interpolation/index.html |date=20210131063823 }} [[Category:插值论| ]] [[Category:数值分析|C]]
该页面使用的模板:
Template:Cite web
(
查看源代码
)
Template:Clear
(
查看源代码
)
Template:Expand
(
查看源代码
)
Template:Lang-en
(
查看源代码
)
Template:Main
(
查看源代码
)
Template:Portal box
(
查看源代码
)
Template:Refimprove
(
查看源代码
)
Template:Reflist
(
查看源代码
)
Template:Wayback
(
查看源代码
)
返回
插值
。
导航菜单
个人工具
登录
命名空间
页面
讨论
不转换
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
工具
链入页面
相关更改
页面信息