布伦特算法的矢量化版本(寻根)

2024-10-06 12:11:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究一个Python版本的海水状态方程(http://www.teos-10.org/)。这个库依赖于像p = f(t,d)这样的逆方程,如果你知道t和{},那么你可以直接计算f(t,d),但是你通常有{}和{}。这只是一个寻根问题,库中提供了使用Newton、bisection或Brent方法的选项。(对于Brent方法,请参见wikihttps://en.wikipedia.org/wiki/Brent%27s_method。)

但是,库会找到t和{}的单个值的根。我希望我的版本可以用于绘制和探索状态方程,所以我希望允许t和{}的向量(numpy数组)值。把牛顿法和二分法矢量化是相当简单的,但是布伦特方法有很多条件,我无法理解。在

关于如何矢量化这个方法有什么提示吗?更重要的是,向量化实际上会比循环tp数组中的值更快吗?在


Tags: 方法org版本httpwww选项newton数组
1条回答
网友
1楼 · 发布于 2024-10-06 12:11:37

如果您编写任何迭代方法的完全矢量化或面向数组的版本,它可能会非常低效。例如,您可能需要在范围的一小部分上进行大量迭代,而大多数范围在少量迭代上收敛。在

你可以用Brent的方法在一个包含t和{}值的粗糙网格上求解方程。然后使用这些解的值来获得更接近中间精细网格值的初始猜测,例如使用双三次样条插值。如果这些初始猜测足够接近二次收敛,你就不需要布伦特的中间值方法。您可以使用Brent的方法自适应地填充粗糙的网格,并使用矢量化的Newton方法对更精细的网格进行最终填充。在

相关问题 更多 >