Excel 寻找拐点
我现在有两组数据,一个x轴和y轴,我需要找到它从正斜率变为负斜率的点。是否有办法在VBA或excel中的函数中找到该数据?作为近似值,您可以为随后的每对行计算DeltaY/DeltaX,并检查其符号的变化 示例(从[A1]开始-从起始单元格向下复制所有公式)Excel 寻找拐点,excel,vba,math,Excel,Vba,Math,我现在有两组数据,一个x轴和y轴,我需要找到它从正斜率变为负斜率的点。是否有办法在VBA或excel中的函数中找到该数据?作为近似值,您可以为随后的每对行计算DeltaY/DeltaX,并检查其符号的变化 示例(从[A1]开始-从起始单元格向下复制所有公式) [B2]=A2^3-A2 [C3]=(B3-B2)/(A3-A2) [D3]=符号(C3) [E4]=如果(D4D3;“嘟嘟”声) X^3-X DY/DX符号(F'(X))变化 -1 0 -0,9 0,
[B2]=A2^3-A2
[C3]=(B3-B2)/(A3-A2)
[D3]=符号(C3)
[E4]=如果(D4D3;“嘟嘟”声)
X^3-X DY/DX符号(F'(X))变化
-1 0
-0,9 0,171 1,71 1
-0,8 0,288 1,17 1
-0,7 0,357 0,69 1
-0,6 0,384 0,27 1
-0,5 0375-0,09-1哔哔声
-0,4 0,336 -0,39 -1
-0,3 0,273 -0,63 -1
-0,2 0,192 -0,81 -1
-0,1 0,099 -0,93 -1
0 0 -0,99 -1
0,1 -0,099 -0,99 -1
0,2 -0,192 -0,93 -1
0,3 -0,273 -0,81 -1
0,4 -0,336 -0,63 -1
0,5 -0,375 -0,39 -1
0,6 -0,384 -0,09 -1
0,7-0357 0,27 1嘟嘟声
0,8 -0,288 0,69 1
0,9 -0,171 1,17 1
1 0 1,71 1
1,1 0,231 2,31 1
斜率的变化发生在相对最大值或最小值(第一个微分商等于0)如果数据中存在任何噪声,计算差异将放大该噪声,因此发现虚假拐点的可能性更大。减少噪声的一种方法是将曲线拟合到数据中,然后计算该曲线的拐点。例如,将一个三次多项式拟合到数据中,并找出其拐点。我建议使用回归法。不是线性回归,而是典型的多阶回归,又称多项式回归(
y=a_0+a_1*x+a_2*x^2+…+a_n*x^n
)。这可以直接在Excel中完成,无需在VBA中编写任何代码。但是,您可能需要处理数组公式(也称为CTRL+Enter公式)
然后,一旦你找到了一个适合你分布的回归(r²>0.9或适合你的),你可以简单地对这个方程求导。因为这是一个多项式方程,所以方程很简单:y'=a_1+2*a_2*x+…+n*a_n+1
有趣的部分现在开始!我们需要找出x
的哪些值构成y=0
。如果您的回归低于4阶,则可能有一个解析解(即,有一个方程可以为您提供x
值,因为您的导数为3阶)。如果超过4阶,则需要使用数值方法。是的,您可以使用VBA来运行对分算法,但您知道吗?使用它来获取您要查找的值(假设至少有一个值是真的)
由于您并没有提供数据集的示例,这是一个数字,但若我们使用MikeD示例,我们会得到这个
使用值,而不是公式:
如果数据本身不是连续的,则不能将斜率描述为平滑函数。此外,拐点不是坡度从正变为负,而是曲率从向上变为向下。你在问题中所描述的基本上是当地的最低/最高限额。对不起,我的措辞有点不恰当。我想找到曲率从上升到下降的拐点。对不起,我的数学有点生疏了。只要找到单元格之间的变化(y的变化除以x的变化),然后找到变化之间的变化(再次除以x的变化),就可以得到曲率。当oes为0时,它接近拐点(考虑到数据是离散的,而不是连续的),不是拐点,而是局部极值(最小值或最大值)。拐点是曲率转换符号,而不是斜率。只有当斜率从正变为负时,拐点才起作用。为什么?E列检测到dy/dx的任何符号变化。。。i、 e.两个数据点之间的任何奇数个相对极值。。。尽管这对(离散的)“数据集”有各种限制。。。看看x=-0.5和x=0.7
[B2] =A2^3-A2
[C3] =(B3-B2)/(A3-A2)
[D3] =SIGN(C3)
[E4] =IF(D4<>D3;"beep";"")
X X^3-x DY/DX SIGN(F'(x)) change
-1 0
-0,9 0,171 1,71 1
-0,8 0,288 1,17 1
-0,7 0,357 0,69 1
-0,6 0,384 0,27 1
-0,5 0,375 -0,09 -1 beep
-0,4 0,336 -0,39 -1
-0,3 0,273 -0,63 -1
-0,2 0,192 -0,81 -1
-0,1 0,099 -0,93 -1
0 0 -0,99 -1
0,1 -0,099 -0,99 -1
0,2 -0,192 -0,93 -1
0,3 -0,273 -0,81 -1
0,4 -0,336 -0,63 -1
0,5 -0,375 -0,39 -1
0,6 -0,384 -0,09 -1
0,7 -0,357 0,27 1 beep
0,8 -0,288 0,69 1
0,9 -0,171 1,17 1
1 0 1,71 1
1,1 0,231 2,31 1