有人知道c中的算法在饱和度曲线中找到饱和点吗?
曲线可以以锐利或平滑的方式改变其增加的速度,并且包含噪声,因此它不像我想象的那么简单。
我尝试计算atan(delta_y/delta_x)
的导数,但它并不适用于所有曲线。
答案 0 :(得分:1)
似乎你试图用数字来确定函数的梯度是否适合化学实验的某些数据点,小于1。您的数据似乎也很嘈杂,并且如果噪声不存在,您想确定何时梯度小于1。
首先,让我们忘掉噪音。你不想这样做:
atan(((y(i)-y(i-1))/(x(i)-x(i-1)))*180/PI
当渐变位于那里时,无需计算渐变的角度。只需将(y(i)-y(i-1))/(x(i)-x(i-1))
与1进行比较。
其次,如果有噪音,你就不能相信像这样计算的衍生物。但要做得更好,我们真的需要了解更多关于你的问题。解释数据的方法有很多种。 x
值中是否存在噪音,或y
值中是否存在噪音?我们是否希望这条曲线具有特征形状,或者它可以做任何事情。
我会猜测:这是某种化学物质,其中y值迅速增加,但随后增长速度减慢,因此在没有噪音的情况下,我们有y = A(1-exp( - 对于某些A和B,B * x))如果是这种情况,则可以使用non-linear regression算法将这样的曲线拟合到您的点,然后测试拟合曲线的梯度是否小于1。 / p>
但如果没有更多数据,您的问题将很难回答。如果您真的不愿意提供更多信息,我建议您对数据进行快速而脏的过滤。例如。在任何时候通过使用先前y值的加权平均值来估计y的真实值,使用权重随着时间的推移而指数地下降。例如。而不是使用y[i]
使用z[i]
其中
z[i] = sum over j = 0 to i of w[i,j]*y[j] / sum over j = 0 to i of w[i,j]
,其中
w[i,j] = exp(A*(x[j]-x[i]))
和A
是您手动调整的数字,直到您获得所需的结果。试试这个,并在调整z[i]
时绘制A
。看看它是否符合您的要求。
答案 1 :(得分:0)
我们可以很容易地从曲线的函数参数中得到曲线的最大值或最小值。看不出结果不一致的原因。
我认为问题可能在于尝试将噪声曲线与原始曲线包含在一起。因此,请确保以适当的方式混合这些曲线。您使用的atan或任何其他数学函数没有任何问题。问题在于您未在此处指定的实施。