线性插值计算器
结果
插值得到的 y
- 斜率
- 3.000000
- 在两点之间的位置
- 0.500000
线性插值计算器求的是两点之间那条直线上任意一处的 y 值。给出两个已知点和一个待求的 x,就能得到插值结果,同时给出这条直线的斜率,以及这个点在两点之间的位置——一个 0 到 1 之间的比例。默认的两个点是 (1, 2) 与 (3, 8),x 取 2,正好落在正中间,所以 y 等于 5。插值的意思是「先从两个测量值画出一条直线,再去线上读一个数」,所以答案的好坏完全取决于「这一段是直的」这个假设。待求的 x 落在两个点之外时,同一个式子继续算下去,得到的是外插;外插在这一页上是被允许的,页面会报出这件事,而不是拒收。
(1, 2) 到 (3, 8) 之间五个等分点
| x | t | y |
|---|---|---|
| 1 | 0 | 2 |
| 1.5 | 0.25 | 3.5 |
| 2 | 0.5 | 5 |
| 2.5 | 0.75 | 6.5 |
| 3 | 1 | 8 |
五个取样位置是两端加上把区间等分成四段的三个点,所以中间那一列读出来是 0、0.25、0.5、0.75、1。往下读正是这张表的用意:y 那一列每次跨出去的步子一样大,因为「位置等步、值也等步」正是直线独有的性质。两端也列进来了,所以第一行与最后一行不用算就能对着两个已知点核。每一格都是纯数,所以这张表在全部十个语言里长得一样。
公式
y = y₁ + (x − x₁) × (y₂ − y₁) ÷ (x₂ − x₁) t = (x − x₁) ÷ (x₂ − x₁) y = (1 − t)·y₁ + t·y₂
- x₁、y₁
- 第一个已知点。它把这条线钉住:x 取 x₁ 时式子里的距离项整个归零,答案精确地退回 y₁。x₁ 取 0 是允许的而且常见,那时这个点就落在 y 轴上。
- x₂、y₂
- 第二个已知点。两点合起来决定一条直线,而一条直线要的也就这么多。两个点的横坐标必须不同:横坐标相同的两个点描述的是一条竖直线,一个 x 同时对应无穷多个 y,没有唯一的答案。
- x
- 要求值的那一处横坐标。它不必落在两个点之间——出了这个范围,同一个式子照样算得下去,得到的是外插而不是插值,所以页面把它报出来,而不是把它挡住。
- t
- 在两点之间的位置:从第一个点算起,这个点在线段上走了多远。第一个点处是 0,正中间是 0.5,第二个点处是 1,而它正是两个 y 值混合时的权重——也就是这个点把线段分成的比例。
已知两个测量值、要问它们中间某一处是多少时用这一页:两个表格值之间的读数、两次观测之间的某个日期、或者任何被认为「按直线一起变」的两个量。若这两个点是用来说明「有多陡」的,那是直线的斜率那一页;若要求的就是正中间那一点,那是中点那一页。
算例
(1, 2) 与 (3, 8) 的正中间
- y 的变化量是 8 − 2 = 6,x 的变化量是 3 − 1 = 2
- x 每走 1,y 就升 3,所以斜率是 3
- x = 2 在 2 个单位长的区间上走了 1 个单位,所以在两点之间的位置是 1 ÷ 2 = 0.5
- 按这个比例把两个值混起来:(1 − 0.5) × 2 + 0.5 × 8 = 1 + 4 = 5
- 插值得到 y = 5
默认这一格值得多看一眼:位置正好是一半时,答案就是 2 与 8 的算术平均。这是「正好落在正中间」的巧合,不是规律——走四分之一处时答案是 3.5,不是别的什么。
一条往下走的线
- y 的变化量是 −20 − 0 = −20,x 的变化量是 10 − 0 = 10
- 斜率是 −20 ÷ 10 = −2,也就是每往右 1 就往下 2
- x = 4 在 10 个单位长的区间上走了 4 个单位,所以在两点之间的位置是 0.4
- 混合:0.6 × 0 + 0.4 × (−20) = −8
- 插值得到 y = −8
这一格两端都带符号,所以值得手核一遍:分母是 10 而不是 −10,答案落在两个已知值之间、没有出界。把区间从右往左读,斜率与位置会同时变号而 y 不变——这正是位置那一格要挨着答案印出来的原因。
问到最后一个点之外
- 与第一格是同一条线:每往右 1 升 3
- x = 4 在 2 个单位长的区间上走了 3 个单位,所以在两点之间的位置是 3 ÷ 2 = 1.5
- 这个比例大于 1,就是答案在说「这一点落在第二个已知值之外」
- 混合:(1 − 1.5) × 2 + 1.5 × 8 = −1 + 12 = 11
- 答案是 y = 11
这就是外插,也是位置那一格印成一个普通数字、而不被截回区间里的原因。1.5 说的是这一点已经越过了那一端、又走了半段;算法与插值完全一样,变的只是怎么读它。
局限
两个已知点的横坐标必须不同。横坐标相同的两个点描述的是一条竖直线,一个 x 对应无穷多个 y,插值没有唯一的答案——这种输入会被拒收,而不是返回无穷大。五个数都限制在一百万以内,因为斜率与位置都是要舍入到六位小数的商,再大就核不动了。落在区间外的值照收并如实报出:位置会大于 1 或小于 0,那是这一页在说明它做的是外插。这一页说不出来的是「外插这件事本身合不合理」——两个点决定的那条直线,对两个点之外会发生什么一无所知,所以这里不给任何置信度读数:两个点撑不起一个置信度。
常见问题
- 线性插值是什么意思?
- 过两个已知点画一条直线,再在它们之间读一个值。linear 这个词把假设直接写在名字里:这一段里这个量被当成匀速变化的,所以答案是两个已知值的加权混合,而不是一次测量。
- 在两点之间的位置那一格有什么用?
- 它说的是这个点从第一个已知点算起走了多远:第一个点是 0,正中间是 0.5,第二个点是 1。答案本身也可以写成两个已知值按这个比例混合,所以插值在两点之外加的东西全在这一格里。把区间四等分,五个等分点的位置就依次是 0、0.25、0.5、0.75 与 1。
- 可以求两个点之外的值吗?
- 可以,这一页就是这么做的——但那时它叫外插,位置那一格会大于 1 或小于 0,这就是它在告诉你这件事。过两点的直线只是对它们之间那一段的猜测;往两端伸出去之后,它变成对一个数据根本没覆盖过的地方的强猜测。
- 为什么横坐标相同的两个点要拒收?
- 因为没有唯一的答案可给。横坐标相同的两个点一上一下,过它们的直线把这一个 x 同时配给所有的 y。这一页会指名拒收这种输入,而不是返回一个无穷大——那看起来太像一个答案了。
- 两个点写反了会有影响吗?
- 线上读出来的值不受影响,但斜率与位置都会变。把两个点对调,斜率与在两点之间的位置同时变号,而插值得到的 y 原地不动——因为描述的还是同一条线,只是从另一头开始读。
- 为什么没有给出拟合优度?
- 因为两个点撑不起这个数。拿两个点去算拟合程度,算出来永远是最好看的那个值,无论背后的数据实际上是什么样。这一页改印斜率与位置——它们是关于这条直线的事实,不是关于数据的断言。
参考资料
- Cartesian Coordinates — 两个已知点与待求位置共同所在的那个坐标系 — Wolfram MathWorld (United States)
- Slope — 插值结果每一步跨出去的那个固定比值,也是两个横坐标相同时失去意义的那个量 — Wolfram MathWorld (United States)
- Line — 两个不同的点所决定的那个对象,也是「在它们之间读一个数」这件事成立的前提 — Wolfram MathWorld (United States)