代码之家  ›  专栏  ›  技术社区  ›  John Burger

Excel插值与现场结果

  •  1
  • John Burger  · 技术社区  · 8 年前

    Excel中的外推法很简单:有一个数字列表(也可以选择它们的成对“X值”),并且可以使用 GROWTH() 功能。

    成长() 也适用于插值:你只需要告诉它你想要计算的中间X值。我的问题是 外观 电子表格中的数据。下面是一个例子:

    假设我有一些输入,通过一些过程得到一些输出。只是,实验中存在空白,因此没有为某些值生成输出:

    Raw data

    出于好奇,我将数据复制到右侧,并使用了Excel的“extendwithgrowth Trend”:我突出显示了前两个条目(仅限),然后右键单击并拖动下一个小正方形 单元格(覆盖此处的最终值)并在上下文菜单中选择“增长趋势”。为了提醒自己这些值是Excel生成的,我给了它们一个灰色的背景:

    Extend data

    嗯。生成的值(毫不奇怪)不是一个好的推断,因为它们没有考虑到后面的值。超过40%!还要注意的是,Excel的扩展功能是一种易于输入的机制,而不是一种计算工具——Excel以原始数字(多个小数位)的形式输入数据。

    所以我通过使用 成长() 函数-同样只对前两个值进行因子分解,但也使用它们的成对X值 所需的插值项作为参数:

    D4: =GROWTH(D$2:D$3,$A$2:$A$3,$A4)
    D5: =GROWTH(D$2:D$3,$A$2:$A$3,$A5)
    D6: =GROWTH(D$2:D$3,$A$2:$A$3,$A6)
    

    GROWTH() column

    谢天谢地,结果与上一篇专栏文章的结果相似(微软对这两个特性使用相同的机制!)我没有覆盖最后一个条目,因为毕竟它有我真正想要的值!我试图解决的问题是,计算值与之前相同,这是一个问题。

    为了改进计算值,我需要合并最后一个值,但同时我希望保持输入值的“自然”序列。换句话说,我希望插值值被放置 原位 . 这意味着 成长() (Range,Range,...) 语法。我试过了,结果 #REF!

    经过一点谷歌搜索(和堆垛我找到了使用 INDIRECT()

    E4: =GROWTH(INDIRECT({"E2:E3","E7"}),INDIRECT({"A2:A3","A7"}),A4)
    E5: =GROWTH(INDIRECT({"E2:E3","E7"}),INDIRECT({"A2:A3","A7"}),A5)
    E6: =GROWTH(INDIRECT({"E2:E3","E7"}),INDIRECT({"A2:A3","A7"}),A6)
    

    INDIRECT() column

    不管怎么说都没用!这些值与前一个版本相同,没有包含上一个值。也许最后一个值不能获得更好的插值结果?因此,作为一个实验,我忽略了“原位”的要求,生成了一个“原位”版本,其中已知值后面跟着期望值,允许我使用简单的范围。成功!但为了强调数据顺序错误,我要求Excel也创建数据的X-Y图:

    B13: =GROWTH(B$10:B$12,$A$10:$A$12,$A13)
    B14: =GROWTH(B$10:B$12,$A$10:$A$12,$A14)
    B15: =GROWTH(B$10:B$12,$A$10:$A$12,$A15)
    

    Ex situ column Ex situ linear chart

    当然,结果是指数型的而不是线性的,因此将Y轴设置为对数会生成一个非常可读的结果,并且它有效地屏蔽了数据的来回变化。但在内心深处,我们都 知道 数据是错误的-看看表!

    enter image description here

    也许,只是也许,如果我使用Excel的“排序数据”功能,它会为我划分范围,并告诉我应该如何编写公式?遗憾的是,虽然它看起来有效,但我得到了一个“循环引用”错误 B12 -范围没有被修改成不连续的,现在 B12号

    Sorted version

    所以,我的“最终”解决方案是保持以前的“exsite”版本,并且只需有一个“in site”列来完成 VLOOKUP() 在exsite(命名)表上-我需要告诉它做一个与 FALSE 参数,因为列表未排序:

    F4: =VLOOKUP($A4,ExSitu,2,FALSE)
    F5: =VLOOKUP($A5,ExSitu,2,FALSE)
    F6: =VLOOKUP($A6,ExSitu,2,FALSE)
    

    In situ version

    请注意,我用星号标记了该列,因为这是一个欺骗:这些值只是通过从另一个表复制来实现的。

    嘘!在那之后,我的问题是:

    有没有一种方法可以直接插值“原位”值,而不必使用“异地”查找表来生成结果?上面的例子故意简单明了:您可以很容易地想象一个较长的列表,其中有更多的空白要填充。

    1 回复  |  直到 8 年前
        1
  •  0
  •   p._phidot_    8 年前

    既然你有很好的数据判断力,我将分享我在这个案例中的发现路径。我更像一个视觉化的人。我看不出有什么东西是通过表格看清楚的。这是我对你做的数据点。:

    Input   Raw
    360     7.16
    370     28.9
    380 
    390 
    400 
    410     5,380.00
    

    突出显示全部并按“我的收藏夹”按钮>F11。我选择折线图类型。然后使用图表左上角的加号按钮,添加趋势线>更多选项。。从那里我选择 'polynomial' 'exponential' . 另外,在“在图表上显示公式”上打勾,你可以在链接中看到,两者都适合。只要取这个方程,并根据需要加入其他值。

    我注意到三件事:

    1. 有了这个公式,我就更容易理解excel提出的趋势线是否符合我的需要。当你玩的时候,你可以看到线性和对数趋势线有多远。
    2. 趋势线方程并不是真的映射到360370410。。。点作为x值,它假设x是0,1,2,3。。。(试着用excel提出的趋势线的“等式”进行测试)

    IMHO,小心使用excel trend。我的下一个最合适的工具-> wolframalpha 对数拟合。


    对于最初的问题:

    我想我的简单回答是:间接的,是的。直接?不确定。


    希望这能在某种程度上治愈/帮助。。( :

    推荐文章