我一直想弄清楚一些matlab代码在做什么.它需要三个带有X和相应Y值的数据点:
X,Y
适合:
fy = polyfit(X, Y, 2)
Run Code Online (Sandbox Code Playgroud)
这是三个X,Y数据点的二阶拟合.
然后是这行代码:
U = -fy(2) / (2*fy(1))
Run Code Online (Sandbox Code Playgroud)
这似乎是在X(1)和X(3)之间的范围内计算X值,但我不确定它究竟在计算什么?为什么将fy(1)值乘以2?
fy(1)是该项的系数x^2,并且fy(2)是该项的系数x.这2*让我觉得衍生,所以让我们看看它是什么样的.首先是原始的二次拟合:
fy(1)*x^2 + fy(2)*x + fy(3)
Run Code Online (Sandbox Code Playgroud)
现在衍生品:
2*fy(1)*x + fy(2)
Run Code Online (Sandbox Code Playgroud)
啊哈,开始看起来熟悉了.如何设置等于零并求解x?
2*fy(1)*x + fy(2) = 0
2*fy(1)*x = -fy(2)
x = -fy(2) / (2*fy(1))
Run Code Online (Sandbox Code Playgroud)
是的,就是这样.因此,它计算二次拟合的导数等于零的x位置.在曲线的一阶导数等于零的地方会发生什么?最大值或最小值.
因此,此代码查找数据二次拟合的最大值或最小值的x坐标.准确的峰值探测器?