0

我目前有两组数据,ax 和 y 轴,我需要找到它从正斜率变为负斜率的点。有没有在 VBA 中找到该数据或在 excel 中找到一个函数?

4

4 回答 4

0

如果数据中有任何噪声,计算差异会放大该噪声,因此找到虚假拐点的机会更大。降低噪声的一种方法是对数据拟合曲线,然后计算该曲线的拐点。例如,将三次多项式拟合到数据中,并找到它的拐点。

于 2013-06-26T18:47:46.683 回答
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)

于 2013-06-26T15:26:19.043 回答
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 的xy = 0。如果您的回归低于 4 阶,则可能存在解析解(即有一个方程可以为您提供x值,因为您的导数将是 3 阶)。如果你超过 4 阶,那么,你需要使用数值方法。是的,您可以使用 VBA 进行二分算法,但是您知道Excel 集成了数值求解器吗?使用它来获取您正在寻找的值(假设至少一个值是真实的)。

由于您没有提供数据集的示例,因此这是可以想象的,但是如果我们使用 MikeD 示例,我们会得到这个!

使用值,而不是公式:

于 2018-11-16T19:20:12.253 回答
0

一般来说,您可以做的最好的事情是使用有限差分来近似二阶导数并找到改变符号的位置。

给定两列X并使用以下公式估计远离末端的Y二阶导数。Ypp假设x值以固定值h递增

无花果

无花果

X 是的 ≈Ypp
x_1 y_1
x_2 y_2 =(y_3-2*y_2+y_1)/(h*h)
x_3 y_3

拐点是二阶导数转换符号的地方。您可以简单地找到两个连续值乘以负值的位置ypp_2*ypp_1 <= 0

如果您想要更高的精度,那么您需要为数据拟合模型,或者使用三次样条。

请注意,如果X数据的间隔不相等,则必须使用下面更复杂的公式

无花果2

于 2021-08-10T20:58:37.640 回答