我目前有两组数据,ax 和 y 轴,我需要找到它从正斜率变为负斜率的点。有没有在 VBA 中找到该数据或在 excel 中找到一个函数?
4 回答
如果数据中有任何噪声,计算差异会放大该噪声,因此找到虚假拐点的机会更大。降低噪声的一种方法是对数据拟合曲线,然后计算该曲线的拐点。例如,将三次多项式拟合到数据中,并找到它的拐点。
您可以 - 作为近似值 - 计算每对后续线的 DeltaY / DeltaX 并检查其符号的变化。
示例(从 [A1] 开始 - 将所有公式从其起始单元格复制下来)
[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
斜率的变化发生在相对最大值或最小值(第一微商等于 0)
我可以建议通过使用回归来做到这一点。不是线性的,而是典型的多阶回归,AKA 多项式回归 ( y = a_0 + a_1*x + a_2*x^2 + ... + a_n*x^n
)。有关如何执行此操作的更多详细信息,请参阅此线程。这可以直接在 Excel 中完成,无需在 VBA 中编写任何代码。但是,您可能需要处理数组公式(AKA CTRL+ Enter 公式)。
然后,一旦您找到适合您的分布的回归(r² > 0.9 或适合您的),您可以简单地对该方程进行导数。因为这是一个多项式方程,所以方程很简单:y' = a_1 + 2*a_2*x + ... + n*a_n+1
。
有趣的部分现在开始了!我们需要找出 make 的x
值y = 0
。如果您的回归低于 4 阶,则可能存在解析解(即有一个方程可以为您提供x
值,因为您的导数将是 3 阶)。如果你超过 4 阶,那么,你需要使用数值方法。是的,您可以使用 VBA 进行二分算法,但是您知道Excel 集成了数值求解器吗?使用它来获取您正在寻找的值(假设至少一个值是真实的)。
由于您没有提供数据集的示例,因此这是可以想象的,但是如果我们使用 MikeD 示例,我们会得到这个!