ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – Sympy RuntimeError:在使用对数求解方程时超出了最大递归深度

2019-07-02 06:44:50  阅读:276  来源: 互联网

标签:python sympy symbolic-math


我试图在sympy中用对数解决一个简单的等式,但是我得到一个RuntimeError:当我尝试执行代码时,超出了最大递归深度.这是我在做的事情:

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的用途),你应该尽可能地避免浮动.例如,6.1以双精度表示为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}]

外卖点:

>如果您的系数是浮点数并且您期望浮点输出,则需要数值解算器(请参阅SciPy.optimize)而不是符号.
>对于符号解,请确保等式中涉及的数字具有干净的代数结构:例如sqrt(sp.Rational(‘6.1’)).

标签:python,sympy,symbolic-math
来源: https://codeday.me/bug/20190702/1353745.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有