Jar*_*olt 5 python numpy mathematical-optimization vectorization
我正在研究海水状态方程的 Python 版本 ( http://www.teos-10.org/ )。该库依赖于反演方程,例如如果您知道和但通常有和,p = f(t,d)则可以直接计算。这只是一个求根问题,该库提供了使用牛顿法、二分法或布伦特法的选项。(特别是对于布伦特方法,请参阅 wiki https://en.wikipedia.org/wiki/Brent%27s_method。)f(t,d)tdtp
t但是,该库会找到和的单个值的根p。我希望我的版本可以用于绘制和探索状态方程,因此我希望允许t和的向量(numpy 数组)值p。向量化牛顿法和二分法相当简单,但布伦特法有很多我无法理解的条件。
关于如何矢量化此方法有什么建议吗?t更重要的是,矢量化实际上会比循环和数组中的值更快吗p?
如果您编写任何迭代方法的完全矢量化或面向数组的版本,它的效率可能会非常低。例如,您可能需要在一小部分范围内进行大量迭代,而大部分范围都收敛于少量迭代。
您可以使用布伦特方法在t和值的粗网格上求解方程。d然后使用这些解值对中间细网格值进行更接近的初始猜测,例如使用双三次样条插值。如果这些初始猜测足够接近二次收敛,则不需要对中间值使用布伦特方法。您可以使用布伦特方法自适应地填充粗网格,并使用矢量化牛顿方法最终填充更精细的网格。