1

我有一些离散值和假设,这些值位于高斯曲线上。应该有一个只使用 3 个离散值的最大计算算法。你知道实现这个计算的 C/C++ 中的任何库或代码吗?

谢谢!

PS:原任务是自动对焦实现。我移动(显微镜)相机并在不同位置拍摄照片。具有最多不同颜色的位置应该具有最佳焦点。

编辑 这是很久以前的事了:-(我只是想删除这个问题,但尊重好的答案。

4

1 回答 1

10

你有三个应该在高斯曲线上的点;这意味着它们位于函数上:

通用高斯函数

如果你取这个函数的对数,你会得到:

高斯函数的对数

这只是一个简单的二级多项式,即具有对称垂直轴的抛物线:

通用二级多项式

系数定义

所以,如果知道抛物线的三个系数,就可以推导出高斯曲线的参数;顺便说一句,您感兴趣的高斯函数的唯一参数是b,因为它告诉您分布的中心在哪里,即它的最大值在哪里。立即发现

b 来自 beta 和 alpha

剩下要做的就是拟合抛物线(使用“原始” x 和您的值的对数)。现在,如果你有更多的点,就会涉及多项式拟合,但是,由于你只有三个点,情况非常简单:只有一条抛物线穿过三个点。

您现在只需为每个点编写抛物线方程并求解系统:

三分制

y 和 z其中z是在相应 x 处读取的实际值)

这可以手动解决(需要一些时间),通过一些 CAS 或...查看 StackOverflow :);因此解决方案是:

通过三点求解抛物线

所以使用这些最后的方程(记住:y是你的“真实”值的对数)和其他关系,你可以很容易地写一个简单的代数公式来得到你的高斯曲线的参数 b,即它的最大值。

最后结果

(我可能在计算中做了一些混乱,在使用结果之前仔细检查它们,无论如何程序应该是正确的)

(感谢http://www.codecogs.com/latex/eqneditor.php提供的 LaTeX 方程)

于 2011-08-14T23:18:15.597 回答