问题描述:
sympy解带自然对数函数log(x*y)的一元方程时,程序长时间运行无法求解的问题。sympy解方程长时间运行不报错,但是无法求出解。等待较长时间后报错:
原因剖析:
由于方程中系数精度较高,所以需要长时间求解。导致带log的函数长时间无法求出准确解。
#无法求出解,因为系数的精度太高了。
from sympy import symbols, Eq, solve, log
x= symbols("x")
coef = 5.2348999999999
f1 = coef*log(100.0*x) - 38
solve(f1)
解决方案1:
将系数进行四舍五入,保留不影响结果的项即可。
round(number, ndigits=None)
返回小数点后四舍五入到ndigits精度的数字。如果ndigits被省略或为None,它将返回与其输入最近的整数。
注意:
round()对于float的行为可能令人惊讶:例如,round(2.675,2)给出的是2.67,而不是预期的2.68。这不是一个错误:这是因为大多数十进制分数【decimal fractions】不能精确地表示为浮点值。
#使用round进行去取整
from sympy import symbols, Eq, solve, log
x= symbols("x")
coef = 5.2348999999999
coef = round(coef,3)
f = coef*log(100.0*x) - 38