我目前有两组数据,x轴和y轴,我需要找到它从正斜率变为负斜率的点。无论如何在VBA中找到数据或在Excel中找到一个函数?
答案 0 :(得分:0)
您可以 - 作为近似值 - 计算每对后续行的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)
答案 1 :(得分:0)
如果数据中存在任何噪声,计算差异将放大该噪声,因此找到虚假拐点的可能性更大。降低噪声的一种方法是使曲线拟合数据,然后计算该曲线的拐点。例如。将三次多项式拟合到数据中,并找到它的拐点。
答案 2 :(得分:0)
我可以建议通过回归来做到这一点。不是线性的,而是典型的多阶回归,即AKA多项式回归(y = a_0 + a_1*x + a_2*x^2 + ... + a_n*x^n
)。 See this thread for more details on how to do it.可以直接在Excel中完成,而无需在VBA中编写任何代码。但是,您可能需要处理数组公式(又名CTRL +输入公式)。
然后,一旦找到适合您的分布的回归(r²> 0.9或适合您的分布),则可以简单地对此方程进行导数处理。由于这是一个多项式方程,因此该方程非常简单:y' = a_1 + 2*a_2*x + ... + n*a_n+1
。
有趣的部分现在开始!我们需要找出什么x
的值使y = 0
。如果您的回归低于4阶,则可能有解析解(即,存在一个方程可以为您提供x
值,因为您的导数为3阶)。如果您超过4阶,则需要使用数值方法。是的,您可以使用VBA进行二等分算法,但是您知道Excel has a numerical solver integrated吗?使用它来获取您要查找的值(假设至少有一个值是真实的)。
由于您没有提供数据集的示例,因此虽然很难理解,但是如果我们使用MikeD的示例,我们会得到的!
答案 3 :(得分:0)