gpt4 book ai didi

python - 可怜的 sympy linsolve/solve 性能

转载 作者:太空宇宙 更新时间:2023-11-03 13:37:07 25 4
gpt4 key购买 nike

我正在使用 sympy 求解一个简单的线性方程组。

这是一个耦合的 ODE,有变量的时间导数,我需要求解最高导数的方程组。由于 sympy 不允许我求解像 phi_1.diff(t) 这样的语句,我用占位符替换了所有导数。

例如:

phi.diff(t).diff(t) + phi(t) =0

成为

ddphi + phi(t) = 0

这很好用。解决方案是正确的,我可以模拟系统 - 它是一个钟摆:https://youtu.be/Gc_V2FussNk

问题是求解方程组(使用 linsolve)需要很长时间。

只需 2 个方程式,就需要 2 秒。对于 3 个方程式,它仍在计算(超过 10 分钟后)。

编辑: @asmeurer 建议我改为尝试解决。对于 n=3,linsolve 花了大约 34 分钟——我只做了一次测量。solve 需要 31 秒(3 次运行的平均值)。

不过,我相信线性 3x3 系统应该在几分之一秒内解决。

对于 n=4,solve 也变得慢得无法忍受(仍在计算)

我已经格式化了代码并创建了一个 iPython notebook:http://nbviewer.jupyter.org/gist/lhk/bec52b222d1d8d28e0d1baf77d545ec5如果向下滚动一点,您可以看到方程组的格式化输出,并在其正下方看到对 linsolve

的调用

方程式相当长,但二阶导数严格线性。我相信这个系统是可以解决的。我需要做的就是求解 3x3 线性方程组,其中系数可能是符号。

有没有更高效的方法来做到这一点?

最佳答案

solve(不是 linsolve)有一些您可以设置的标志,可以使其更快:

  • simplify=False:禁用结果的简化。
  • rational=False:禁用 float 到有理数的自动转换。

solve 文档字符串中有一个警告,即 rational=False 可能导致某些方程由于多边形问题而无法求解,因此请注意这是一个潜在的问题。

关于python - 可怜的 sympy linsolve/solve 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37954278/

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