如何在 Excel 中为任意数据插入中间值

Wag*_*Lip 5 worksheet-function microsoft-excel microsoft-excel-2013

我有像这个例子这样的数据表,在这种情况下,A1:B9 有九个条目:

A    B
--   ---
1    2.9
2    5.06
3    7
4    8.84
5    10.87
6    13.24
7    16.22
8    20.25
9    36.7
Run Code Online (Sandbox Code Playgroud)

以上代表了 B 中非线性增加的物理变量的九次测量,例如电压,而 A 正好代表完成测量的九个回合中的每一个。

我想创建第二个表,即 E 列和 F 列,其中的行数是 B 列中最大值的“下一个整数”。在这种情况下,B9=36.7,因此它将有 37 行。F1:F37 列将包含整数 1 到 37,E 列必须具有与 F 对应的数值,与 A 到 B 列之间的关系相同。换句话说,插入与 F 列值对应的 E 列值。

例如,A3=3 和 B3=7。在这种情况下,F7=7 和 E7=3,因为 B 已经包含了整数 7 并且在 A 列中有一个匹配值。但是,F8=8,这是一个不包含在 B 列中的中间值。所以 E8 将位于 3 之间4、基于原始数据,必须进行插值。

这个想法是在绘制图形时,A1:B9 将具有与 E1:F37 相同的形状。在此示例中,我将数据表扩展为 37 个整数结果,这些结果在原始测量过程中会出现,并将查看这些值出现的时间(在 E 列中,带小数位)。

我试过的

在尝试自己解决这个问题时,我找到了一个耗时的公式(请注意,在我的尝试中,我的 E 和 F 列与我上面描述的相反)。

  1. 我创建了一个包含 B 列元素之间差异的列 (K)。K5 = B5-B4。这是每个 X 增量的 Y 位移。
  2. E 列将包含与 B 中最大元素的下一个整数值一样多的连续整数 (37),从 1 开始。在这种情况下,B9 包含 36.7,因此为 37。
  3. 在 F1:F37 上,我输入以下公式。

单元格 F1 包含:

=IF(E1>$B$9,$A$9+(E1-$B$9)/$K$9,IF(E1>$B$8,$A$8+(E1-$B$8)
    /$K$9,IF(E1>$B$7,$A$7+(??E1-$B$7)/$K$8,IF(E1>$B$6,$A$6+(E1-$B$6)
    /$K$7,IF(E1>$B$5,$A$5+(E1-$B$5)/$K$6,IF(E1??>$B$4,$A$4+
    (E1-$B$4)/$K$5,IF(E1>$B$3,$A$3+(E1-$B$3)/$K$4,IF(E1>$B$2,$A$2+
    (E1-$B$2??)/$K$3,IF(E1>$B$1,$A$1+(E1-$B$1)/$K$2,E1/$K$1)))))))))  
Run Code Online (Sandbox Code Playgroud)

它工作得很好。但它不是一个自动化的公式;必须输入与 A+B (X+Y) 列中的元素一样多的“IF”。我用来自 A1:B9 和 E1:F37 的线测试了散点图(为了正确的 X/Y 序列而反转),它们生成了完全相同的曲线形状,所以它有效。

但它不是一个有效的解决方案,因为它需要对每个数据集进行繁琐的、自定义的、手动的过程。我正在寻找一种使用 Excel 内置功能以更自动化的方式完成此任务的方法,或者至少是使用公式的更通用方法。

fix*_*234 9

简答

插值基于关联 X 和 Y 值的方程。如果您知道实际方程,则可以直接计算您想要的任何中间值。如果不这样做,则使用近似值进行插值。近似值的质量决定了中间值的准确程度。如果您使用有限数量的点逼近曲线,则线性插值将是粗略的。还有其他几种方法可以为您提供更好的结果,以及可以完成大部分工作的内置分析工具。

长答案

您正在寻找自动插入中间值的“通用公式”或解决方案。您几乎可以对任何数据使用线性插值,但如果数据点数量有限且数据形状有明显的曲率,结果将是粗糙的。如果您想要准确性,则没有“一刀切”的解决方案。给定数据集的最佳解决方案将取决于数据的特征。

方程式

无论您如何操作,插值都是使用定义 X 和 Y 之间关系的方程完成的。该方程可以是实际值或估计值。如果是估算,则有许多不同的方法是由数据的性质和您需要完成的任务所驱动的。

在您的另一个问题中,您使用了基于方程的数据Y=2^X。当你有实际的方程时,你可以精确地进行插值。为Xor选择一个新值,Y等式为您提供另一个值。如果你不知道实际的方程,你需要找到一个近似的方程。我将使用这个答案来关注插值方法。这些通常使用完成大部分工作的内置分析工具。如果您需要有关使用特定工具或更自动化方法的机制的更多详细信息,我们可以在另一个答案中对此进行扩展。

试着找出实际的方程式

最好的解决办法是看看你是否能确定实际的方程是什么。如果您知道生成数据的过程,则可能会告诉您等式的性质。许多过程在受控条件下处理单个驱动变量且没有随机噪声时,遵循已知方程类型的简单曲线。因此,第一步是查看数据的形状,看看它是否与其中一个相似。

一种简单的方法是绘制数据并添加趋势线。Excel 有许多常用曲线可供尝试拟合。

趋势菜单

让我们用2^N你的另一个问题的数据来试试这个。如果您不认识数字模式并尝试使用趋势线方法,您会看到不同形状曲线的图标。指数曲线是相同的一般形状,这会给你这个:

2^N

Excel 使用e而不是2作为基础,这只是一个翻译(e 0.6932)。在视觉上,您可以看到趋势线完全遵循数据。R 2也告诉你这一点。R 2是一种统计量度,用于衡量您在方程式中所解释的数据中的变异程度。该值1意味着方程占变异的 100%,或完美拟合。

这个问题中的例子也有一种指数形状。如果您尝试相同的方法,则会得到以下结果:

经验适合

所以这个数据不是指数的。我们可以尝试一个多项式,它描述了一些自然过程并能够模拟各种曲线(我稍后会详细讨论):

聚3

作为数据背后过程的近似,它不是一个很好的选择。在三阶(一个包含 X 到 X^3 的幂的方程),它具有比数据更多的主要拐点,但仍然不匹配。因此,潜在的方程看起来不像是一条简单的公共曲线,这意味着需要对方程进行近似。

线性插值

这是您在评论中描述的方法。它很简单,使用简单的公式,并且相当容易自动化。如果您有很多点,并且它们之间的直线足够接近,那就足够了。在许多曲线上,某些区域的短线段将接近直线。但是,对于曲线来说,这是一个很差的近似值,并且您的结果在任何明显曲率的区域都会不准确。在您的示例中,X 值 7 和 8 之间的区域会有很大的曲率。在该区域中,与实际曲线相比的直线如下所示:

直线 vs 曲线

您正在寻找适用于任何数据的通用解决方案。您可能会发现线性插值对于某些数据来说过于粗糙。

回归

人们在这里和其他帖子中建议将回归作为一种方法。可以使用趋势线或其底层工作表函数或分析工具来完成(我认为这可能在分析工具包中,可能需要将该选项加载到 Excel 中,默认情况下可能不会加载)。

回归尝试为您的数据拟合一条曲线,目的是最小化数据和曲线之间的总误差。在正常使用中,它不是执行此任务的正确工具(它是用于拟合趋势线的方法,您已经看到与您需要的相比如何)。

  • 它适用于您的目标是对数据背后的过程进行建模的情况。数据被认为是不准确的,回归表明它真正应该是什么。回归找到的曲线可能不会通过任何实际数据点。在您的情况下,数据已给出并假设是准确的。曲线必须通过每个点。

  • 回归尝试将单个方程拟合到所有数据。如果创建数据的过程没有用可供尝试的方程类型来描述,那么它就不会有效。对于大量数据点,每个段的线性插值可以比所有数据的回归曲线更好地近似。

但是,回归可以“滥用”作为您想要的解决方法,而不是以通常的方式使用它,并且它通常会起作用。当您尝试对过程建模时,通常使用最简单的公式(奥卡姆剃刀)。另一方面,有了足够复杂的方程,你可以拟合任何东西。你总是可以画一个可以穿过每个点的涂鸦。对于N点,您可以找到一个N-1通过所有点的阶多项式方程(最坏情况)。

我说“通常”是因为在某些情况下,这是一条非常受折磨的线路,对您的目的毫无用处。请注意,这种方法并没有真正“建模”任何东西,因为结果方程将预测数据范围之外的行为。

这是使用多项式回归和连续高阶方程对您的数据进行的分析(第一个屏幕截图包括 3 - 5 阶):

聚3-5

(单击图像以获得可读的大小。)请注意,分析工具包括您想要执行的插值类型;它生成了中间值。对于每个分析,这些a(n)值是它找到的方程的系数。 a(0)是常数,a(1)是 X^1 项的系数等。它显示了拟合的 R 2值。它需要实际上 1足够接近您的目的。

我已经突出显示了差异最大的原始数据值。在这个顺序范围内,每个连续顺序的拟合都会变得更好一些,但更准确地描述哪些特定点可能会发生变化。这是这三个的图表:

聚3-5图

当我们得到 6 阶和 7 阶多项式时,它看起来像这样:

聚6-7

保利6-7图表

如果我们为您的 9 个值使用 8 阶多项式,那将是完美的,但 7 阶可能已经足够接近了。作为透视,请注意七阶方程的 R 2为 0.99999,但仍然不完美。

使用回归分析工具找到合适的拟合(在这种情况下是 7 阶或 8 阶方程),将产生您想要的中间值。但是最好绘制结果图表并观察曲线以确保它不是涂鸦。

样条

如果您绘制数据图表并选择平滑线选项,Excel 用来生成的就是样条曲线。事实上,几乎所有计算机图形应用程序(包括字体定义)都基于用于平滑曲线和曲线过渡的样条。它以绘图员曾经用来将任意点与曲线连接起来的灵活规则命名。

样条曲线为每个部分创建曲线,一次一个部分,考虑相邻点。曲线通过每个点,并且该点的任何一侧都没有突然的变化,就像用直线连接这些点时所得到的那样。

用于样条的方程没有尝试对产生数据的过程进行建模;看起来很漂亮是严格的。然而,大多数过程遵循某种连续、平滑的曲线。当您处理单个曲线段时,产生形状大致相似的曲线的许多不同方程将在该段内产生非常相似的值。所以在大多数情况下,样条曲线会产生一个你想要的很好的近似值(它自然地通过每个点,不像回归,它必须强制通过每个点)。

再次,我说“大多数情况”。样条曲线非常适用于非常均匀和规则的数据,并遵循曲线的“规则”。它可以用不寻常的数据做一些意想不到的事情。例如,之前的一个 SU 问题是关于 Excel 生成的数据图表中这个奇怪的负“下降”:

蘸

样条曲线有点像果冻。想象一下一大块果冻,你限制了你想要它们的特定位置。其余的果冻会在它需要的地方膨胀。方程可以定义某些类型的曲线。如果您强制曲线通过特定点,也会发生同样的事情。使用样条,效果仅限于奇怪的凸起或看起来不自然的曲线段;高阶回归方程可以遵循一条疯狂的道路。

这是样条曲线表示数据曲线的方式:

样条

样条图

如果将其与高阶回归曲线进行比较,则样条曲线对局部变化的“响应性”更强。

我使用 LibreOffice Calc 进行了这个分析,它有一个包含样条曲线的分析插件。正如您所看到的,这也会为样条线生成您正在寻找的插值结果。我无法随时访问 Excel 的分析工具包,因此我不知道 Excel 是否包含样条。如果没有,LO Calc 将在 Windows 中运行并且它是免费的。

底线

这涵盖了可用于插入中间值的方法。不同的方法可能会更好地处理不同的数据。或者,您的要求可以是任何近似的、快速的和简单的。决定你需要什么样的插值。如果您需要有关如何完成它的更多详细信息,我们可以在另一个答案中解决机制。