gpt4 book ai didi

python - 优化 scipy 求根算法

转载 作者:行者123 更新时间:2023-12-01 09:25:16 25 4
gpt4 key购买 nike

我在代码中使用了 scipy.optimize 中的 root 函数以及“excitingmixing”方法,因为其他方法(例如标准牛顿)不会收敛到根我正在寻找。

但是我想使用 numba 优化我的代码,它不支持 scipy 包。我尝试在文档中查找“令人兴奋的混合”算法来自己编程:

https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.root.html

除了该方法“使用调整的对角雅可比近似”这一不太有用的陈述之外,我没有发现任何有用的东西。

如果有人能告诉我一些有关该算法的信息或者了解如何以其他方式优化 scipy 函数,我会很高兴。

根据要求,这里是一个最小的代码示例:

import numpy as np
from scipy import optimize
from numba import jit

@jit(nopython = True)
def func(x):
[a, b, c, d] = x

da = a*(1-b)
db = b*(1-c)
dc = c
dd = 1

return [da, db, dc, dd]

@jit(nopython = True)
def getRoot(x0):
solution = optimize.root(func, x0, method="excitingmixing")
return(solution.x)

root = getRoot([0.1,0.1,0.2,0.4])
print(root)

最佳答案

你可以查看scipy的源代码来查看excitingmixing选项的实现:

https://github.com/scipy/scipy/blob/c948e96ebb3454f6a82e9d14021cc601d7ce7a85/scipy/optimize/nonlin.py#L1272

您可能不想在 numba 中重新实现整个求根算法。您可以测试的更好策略是使用 numba 来优化传递给 scipy 方法的函数。您仍然需要支付 scipy 调用函数的一些开销,但如果瓶颈是评估函数,您可能会看到性能提高,并且可以使用 numba jitted 版本更快地完成此操作。我发现最好只尝试 numba 并使用 timeit 方法进行测试。

关于python - 优化 scipy 求根算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50470855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com