一、分段插值需求
试验或数据样本经常是离散的点,若要求取中间某个点对应的Y值,使用分段插值可有效提高精度;但是若手动分段编辑插值函数,就需先手动确认插值位置,再编写插值函数;若X值变化,就需要重新输入对应的插值公式,会花费很长时间,若能够自动判断插值区间,即可解决此问题。今天达芬奇就与同学们分享在Excel中自动分段插值函数的编写逻辑和使用方法。
二、分段插值的逻辑过程
若要实现自动分段插值,就需完成以下四个步骤:
1、要有一个已知的样本库,有确定的X和Y的集合,且需将X依序(顺序或逆序)排列,否则将无法确定从何处插值;
2、判断已知数X0在样本库中的位置,比如其对应的已知上下限X/Y值为X-1和X1,Y-1和Y1;
3、将对应的插值上下限提取,如提取X-1和X1,Y-1和Y1;
4、选择相应的插值方式对应的函数。
三、确定分段插值的函数
理解完上述步骤后,接下来即可选择上述步骤相应的函数(下面以A/B/C/D对应函数对应上节步骤1/2/3/4):
A、假设已知的样本库未完成顺序或逆序排列,如下图所示,首先将自变量X放在第一列,然后选择所有样本库数据,点击“开始”→“排序和筛选”→“升序”或“降序”,点击后即可自动完成按首列自变量X顺序排列的样本库(如下图所示)。
B、判断X0位置即查找已知X0对应首列中的位置, 即对应Execl 中的 match 函数: MATCH(lookup_value, lookup_array, [match_type]),翻译下即:MATCH(X0, [A2:A9],1) (函数三个数的解释:Match(给定自变量,要搜索的自变量所在列, 查找比给定自变量小的最大值),详细解释可见最后函数附表解释。如图所示,即可得到MATCH函数对应值为2,即23位于自变量X所在列的第2个数至第3个数之间。
C、将对应的插值上下限提取对应Excel中的 offset 函数:OFFSET(reference, rows, cols, [height], [width]),翻译下即:若提取23对应的自变量X上下限即输入:OFFSET (A2,F4-1,0,2,1)(函数五个数的解释:OFFSET(样本库自变量第一个值, X向下行偏移量,自变量的列偏移量,提取的行数,提取的列数),详细解释可见最后函数附表解释。如下图所示,即首先选择自变量第一个值8(即:A2),然后向下偏移1个数得到20(即:A3),因为现在要提取自变量X的上下限,所以cols列偏移为0,然后提取(20和35)(A3:A4:即高度为2,宽度为1);
同理,若提取因变量Y对应上下限即: OFFSET(A2,F4-1,2,2,1),如下图所示:(因为offset函数无法直接显示提取值,但可以做运算,所以示例以“和”代替)
D、最后插值步骤对应的插值函数:TREND 函数:TREND (known_y,[known_x's],[new_x's],[const]),其中 TREND 函数沿线性趋势返回值。它使用最小二乘法)数组的 known_y 和 known_x来拟合直线,TREND 返回指定new_x数组沿该行的 y 值。即可得到最终的插值函数形式:Y0 = TREND。最后,即可得到Z0值:33.4。
综上,我们只需将上述3个函数综合一起,即可完成对分段插值函数的自动求值,即最终的Z0 =
TREND(OFFSET(A2,MATCH(F3,A2:A9,1)-1,2,2,1),OFFSET(A2,MATCH(F3,A2:A9,1)-1,0,2,1),F3),求得Z0=33.4,最后大家可修改X0得值进行验证,看此函数是否计算正确。
掌握了上述自动插值求解逻辑和过程后,即可根据自身需求,任意改变X值,轻松应对分段插值需求。本文Excel示例达芬奇已经上传,大家可自行下载理解参考。示例下载地址:
Download address:https://wwlh.lanzn.com/iulHj2ipgh3c 密码:bygw
四、对应函数解释
1、MATCH 函数语法
MATCH(lookup_value, lookup_array, [match_type]) ,具有下列参数:
lookup_value (必需包含): 要在 lookup_array 中匹配的值。 例如,如果要在电话簿中查找某人的电话号码,则应该将姓名作为查找值,但实际上需要的是电话号码。
lookup_value 参数可以为值(数字、文本或逻辑值)或对数字、文本或逻辑值的单元格引用。
lookup_array (必需包含): 要搜索的单元格区域。
match_type(可选): 数字 -1、0 或 1。 match_type 参数指定 Excel 如何将 lookup_value 与 lookup_array 中的值匹配。 此参数的默认值为 1。
备注:
MATCH 返回匹配值在 lookup_array 中的位置,而非其值本身。 例如,MATCH("b",{"a","b","c"},0)返回 2,即“b”在数组 {"a","b","c"} 中的相对位置。
匹配文本值时,MATCH 函数不区分大小写字母。
如果 MATCH 函数查找匹配项不成功,它会返回错误值 #N/A。
如果 match_type 为 0 且 lookup_value 为文本字符串,您可在 lookup_value 参数中使用通配符 - 问号 (?) 和星号 (*) 。 问号匹配任意单个字符;星号匹配任意一串字符。 如果要查找实际的问号或星号,请在字符前键入波形符 (~)。
2、OFFSET函数语法
OFFSET(reference, rows, cols, [height], [width])
OFFSET 函数语法具有下列参数:
引用(reference)(必需包含): 要基于其偏移量的引用。 引用必须引用单元格或相邻单元格区域;否则,OFFSET 返回 #VALUE! 错误值。
行(rows)(必需包含): 需要左上角单元格引用的向上或向下行数。 使用 5 作为 rows 参数,可指定引用中的左上角单元格为引用下方的 5 行。 Rows 可为正数(这意味着在起始引用的下方)或负数(这意味着在起始引用的上方)。
列(Cols)(必需包含): 需要结果的左上角单元格引用的从左到右的列数。 使用 5 作为 cols 参数,可指定引用中的左上角单元格为引用右方的 5 列。 Cols 可为正数(这意味着在起始引用的右侧)或负数(这意味着在起始引用的左侧)。
高度 (Height)(可选): 需要返回的引用的行高。 Height 必须为正数。
宽度 (Width)(可选): 需要返回的引用的列宽。 Width 必须为正数。
备注:如果行和 cols 在工作表边缘上偏移引用,OFFSET 将返回 #REF! 错误值;
如果省略 height 或 width,则假设其高度或宽度与 reference 相同。
OFFSET 实际上并不移动任何单元格或更改选定区域;它只是返回一个引用。 OFFSET 可以与任何期待引用参数的函数一起使用。 例如,公式 SUM(OFFSET(C2,1,2,3,1)) 可计算 3 行 1 列区域(即单元格 C2 下方的 1 行和右侧的 2 列的 3 行 1 列区域)的总值。
今天的达芬奇分享就到这里啦,大家有任何疑问都可在下方留言,达芬奇会尽可能为每个疑问者解答。如果对你有帮助也请多多关注转发分享(公众号同名:达芬奇科普),让更多人看到,帮助更多人 !