das*_*uki 8 microsoft-excel microsoft-excel-2010
我想根据下表的 x、y 数据进行查找和插值。我希望方程式尽可能简单,以减少可能出现的错误数量。整个表格大约有 50 行 x 30 列。我有大约 20 张这样的桌子。这是其中的一段摘录:
A B C D
1 0.1 0.2 0.3
2 2.4 450 300 50
3 2.3 500 375 52
4 2.1 550 475 55
5 1.8 600 600 60
Run Code Online (Sandbox Code Playgroud)
例如,方程应该找到 x = 2.27 和 y = 0.15 的值
您有许多表,每个表的第一行和第一列都有索引值,表内部有一组值,每个值都与特定的行和列索引值相关联。
给定两个值,它们分别可能正好等于行或列索引,或者可能位于两个行索引值或两个列索引值之间,您想根据给定的两个值对表中的值进行直线插值第一行和第一列的值。

要对位于表中索引值之间的输入值进行插值,需要以下内容:
大于(或等于)垂直输入值的最小垂直索引值的行号vnum。由于表的第 1 列中的索引值按降序排列,因此可以通过以下方式获得:
=MATCH(vnum,vrng,-1)
其中vnum是输入值,vrng是表第一列中索引的垂直范围。该MATCH函数的 -1 第三个参数表示将执行“小于”查找。这种 MATCH 函数的使用要求索引的垂直范围按降序排列。
小于(或等于)垂直输入值 ( vnum)的最大垂直索引值。这无法使用该MATCH函数获得,因为垂直索引值未按 要求的升序排序MATCH。而是使用以下数组公式。
=MIN(IFERROR(1/(vnum>=vrng)*ROW(INDIRECT("1:"&ROWS(vrng))),ROWS(vrng)))
此公式中的关键元素是vnum>=vrng,它生成一个布尔数组,其中第一个TRUE位于包含小于输入值的最大垂直索引值的行位置。(使用 ">=" 可能看起来违反直觉;它是必需的,因为列中的索引按降序排列。)公式的其余部分将此行位置转换为行号。
这两个上下行号用于计算将输入值上下括起来的索引值以及与这些索引值对应的内部表值。
水平索引范围的相应列号和列值以类似的方式构造。
其余步骤通过插值算法工作。

通过这么多步骤,计算多个输入值的内插量似乎不切实际。使用双向数据(“假设”)表实际上很容易。

通过使用它们的一个公式版本,可以进一步简化多个表的这些计算的设置。要使用它,需要设置命名范围vnum, hnum, vrng, hrng, datarng, validvnum, 和validhnum。这些表格需要在单独的工作表或单独的工作簿中。如果在单独的工作表中,则必须将每个工作表的名称设置为具有工作表范围。
然后将在数据表的左上角单元格中输入单步计算公式。这个 2,100(减一)个字符的公式包含在可下载的工作表中。
可以使用此链接下载包含这组计算的工作表。
结合使用Excel的索引和匹配功能来实现您的结果。将以上数据精确放入excel中并推导出以下公式。公式输入到单元格 D8 中。
=INDEX($B$3:$D$6,MATCH(E2,$A$3:$A$6,-1),MATCH(F2,$B$2:$D$2,-1))
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
128625 次 |
| 最近记录: |