2

我有以下非常庞大的 excel 设置,但这是一个简化的设置:

Site1 X-Given   Y-Given Site2   X-New-Given Y-Interpolated
A     10        400     A       25      550
A     20        500     A       25      550
A     30        600     A       26      560
A     40        700     B       27      570
A     50        800     B       30      600
B     10        400     B       15      450
B     20        500     B       25      550
B     30        600     B       30      600

我想要完成的是让每个 Y-Interpolated 仅根据其特定站点进行插值,并且没有任何交叉。因此,站点 A 只会与站点 A 进行插值,并且与站点 B 相同……依此类推。

我正在使用具有以下语法的 interpolate excel 插件: =interpolate(x_array,y_array,x_given)

谢谢您的帮助!

4

2 回答 2

1

您可以尝试使用此工作表功能替代方案...使用数据A1:E9,输入F2并填写:

=FORECAST(E2,IF(MMULT(ROW(B$2:B$9)-LOOKUP(0,(B$2:B$9>=E2)/(A$2:A$9=D2),ROW(B$2:B$9))-0.5,1)^2<1,C$2:C$9),B$2:B$9)

更新:这是使用 CTRL+SHIFT+ENTER 输入的稍短的替代方案

=PERCENTILE(IF(A$2:A$9=D2,C$2:C$9),PERCENTRANK(IF(A$2:A$9=D2,B$2:B$9),E2,20))

这假设变量之间存在正相关关系,并在两个边界处返回值。

背景

如果要为此使用工作表函数,显而易见的方法是找到与 X 相邻的两个点:(X1,Y1) 和 (X2,Y2)。然后使用以下公式计算 Y:

Y = Y1 + (X - X1) * (Y2 - Y1) / (X2 - X1)

问题在于,这导致了一个冗长的公式,涉及六个 INDEX/MATCH 组合和另外六个用于将数据限制到指定站点的条件。这导致人们寻找其他选择......

1 . 第一个公式看起来很复杂,但它所做的只是根据同一站点的两个相邻点应用直线拟合。评估上面第三行的公式 - 通过突出显示公式的每个部分并按 F9 - 给出:

=FORECAST(26,{FALSE;500;600;FALSE;...},{10;20;30;40;...})

FORECAST 忽略非数字数据,因此结果与仅使用 {500,600} 和 {20,30} 作为第二个和第三个参数相同。您可以在公式的其他部分使用 F9 来进一步分解它 - 我会为您留下详细信息。(MMULT(...,1) 部分只是将参数更改为数组,因此您可以在没有数组条目的情况下输入公式。)

2 . 第二个公式更容易理解。首先请注意,在 Excel 中,百分位数是通过线性插值计算的,IF 部分只是将数字数据限制在指定的位置。假设数据在增加,我们可以在 PERCENTILE 公式中找到与 x 范围中的查找值匹配的 k 值,并返回具有该 k 值的 y 范围值。对于有问题的示例:

26  =PERCENTILE({10,20,30,40,50},0.4)
560 =PERCENTILE({400,500,600,700,800},0.4)

要计算 0.4 的值,可以使用与 PERCENTILE 成反比的 PERCENTRANK:

0.4 =PERCENTRANK({10,20,30,40,50},26)
0.4 =PERCENTRANK({400,500,600,700,800},560)

上面的公式结合了这两个函数,最后一个参数设置为 20 以实现全精度(Excel 在内部将值存储为大约 15-17 位精度)。

于 2012-08-16T07:20:24.343 回答
0

因为您使用的工具是基于 .xll 的 excel 插件,所以您(或我们)无法修改代码或创建interpolate允许添加条件的自定义版本。

相反,您必须将数据分开过滤,然后在过滤后的数据集上运行自定义函数。

于 2012-08-16T01:01:04.930 回答