gpt4 book ai didi

python - 同情运行时错误 : maximum recursion depth exceeded when solving equation with logarithms

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

我试图在 sympy 中求解一个简单的对数方程,但是当我尝试执行代码时,我得到了一个RuntimeError: maximum recursion depth exceeded。这是我正在做的:

import sympy as sp
import numpy as np

pH = sp.Symbol("pH")
pCO2 = sp.Symbol("pCO2")
HCO3 = sp.Symbol("HCO3")

myhco3 = 10.0**(7.0 - 6.1 + np.log10(0.03 * 44.0))


hh = sp.Eq(pH, 6.1 + sp.log(HCO3, 10) - sp.log(0.03 * pCO2, 10))
eqs = [hh,
sp.Eq(pH, 7.0),
sp.Eq(pCO2, 44.0)]

result = sp.solve(eqs, dict=True)
print result

错误发生在我尝试为方程式 sp.solve 的那一行。这似乎是一个相当简单的方程式。是否需要设置一些 sympy 假设?

最佳答案

如果您想要一个基于代数运算的符号解决方案(这就是 SymPy 的用途),您应该尽可能避免 float 。例如,6.1 在 double 中表示为 3433994715870003/562949953421312,当这样的系数满足对数时,代数运算可以很容易地产生像 1933167165348049724692481703936 这样的多项式次数方程,这不会导致任何好的结果。如果不是

hh = sp.Eq(pH, 6.1 + sp.log(HCO3, 10) - sp.log(0.03 * pCO2, 10))
eqs = [hh, sp.Eq(pH, 7.0), sp.Eq(pCO2, 44.0)]

你写

hh = sp.Eq(pH, sp.Rational('6.1') + sp.log(HCO3, 10) - sp.log(sp.Rational('0.03') * pCO2, 10))
eqs = [hh, sp.Eq(pH, 7), sp.Eq(pCO2, 44)]

输出将立即出现:

[{pCO2: 44, pH: 7, HCO3: 33*10**(9/10)/25}]

要点:

  1. 如果您的系数是 float 并且您希望得到 float 输出,那么您需要一个数值求解器(参见 SciPy.optimize)而不是一个符号求解器。
  2. 对于符号解,请确保方程中涉及的数字具有清晰的代数结构:例如,sqrt(sp.Rational('6.1'))

关于python - 同情运行时错误 : maximum recursion depth exceeded when solving equation with logarithms,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38176765/

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