我有一个以高频运行的控制回路,需要每个周期计算一个平方根。典型的平方根函数工作正常,但需要过多的时间。由于我取其平方根的值在每个循环中变化不大,我想找到一个迭代平方根,它会收敛,然后跟踪正确的结果。这样我就可以在每个时间步进行一次迭代,而不是多次迭代。

问题是当输入改变时,我见过的所有迭代平方根方法都可能会失败。特别是当输入变为零然后再次增加时,看起来会出现问题 - 这些方法不喜欢从零猜测开始。

我的输入范围是 0-4.5,我需要大约 0.01 的精度,所以使用 0.01 的增量/减量可能需要太长时间 - 我希望它主要在 10 个周期或更短的时间内收敛。

仅供引用,我使用的是 16/32 位定点输入是 16 位 q12。它在微 Controller 上,所以我对使用 1K 查找表不感兴趣。代码也是从simulink模型生成的,它们的查表函数开销很大。

有没有很好的解决方案?

最佳答案

您可以使用一次哈雷方法。它具有三次收敛,因此如果值稍微移动,它应该非常精确:

x_{n+1} = x_n * (x_n^2 + 3Q) / (3 x_n^2 + Q)

这三次收敛到 sqrt(Q)

引用:http://www.mathpath.org/Algor/squareroot/algor.square.root.halley.htm

关于math - 跟踪移动值的平方根,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10125293/

10-10 16:42