如何在 sympy 中使用 math.log10
how to use math.log10 in sympy
我有一个关于 sympy 的问题,我需要求解两个方程组:
B1=2.51/(Re(f^(0.5)))
f=(1/(-2*log10((epsilon/D/3.7)+B1)))^2
我尝试使用 sympy、numpy 和 fsolve,但是使用 math.log10 时出现问题,即 returns a float:
from sympy import*
import math
def f_cole(Epsilon, D, Re):
#Fattore di attrito Equazione di Colebrook per flusso turbolento
B1,f=symbols('B1,f')
eq1 =Eq(( 2.51 / (Re*(f**0.5))-B1),0)
eq2=Eq(((1/(-2* math.log10((Epsilon/D/ 3.7)+B1)))**2 -f),0)
solveset((eq1,eq2), (B1,f))
return(f)
那 returns :
TypeError: can't convert expression to float
您不能将模块 math
中的函数与 sympy
表达式混合使用。 math
中的函数期望将浮点数作为输入,而不是表达式。
而是使用 sympy.log
。
import sympy
x = sympy.Symbol('x', real=True)
print('log(x): ', sympy.log(x))
print('log(exp(x)): ', sympy.simplify(sympy.log(sympy.exp(x))))
print('log10(x): ', sympy.log(x, 10))
print('log10(10**x): ', sympy.simplify(sympy.log(10**x, 10)))
输出:
log(x): log(x)
log(exp(x)): x
log10(x): log(x)/log(10)
log10(10**x): x
我有一个关于 sympy 的问题,我需要求解两个方程组: B1=2.51/(Re(f^(0.5))) f=(1/(-2*log10((epsilon/D/3.7)+B1)))^2 我尝试使用 sympy、numpy 和 fsolve,但是使用 math.log10 时出现问题,即 returns a float:
from sympy import*
import math
def f_cole(Epsilon, D, Re):
#Fattore di attrito Equazione di Colebrook per flusso turbolento
B1,f=symbols('B1,f')
eq1 =Eq(( 2.51 / (Re*(f**0.5))-B1),0)
eq2=Eq(((1/(-2* math.log10((Epsilon/D/ 3.7)+B1)))**2 -f),0)
solveset((eq1,eq2), (B1,f))
return(f)
那 returns :
TypeError: can't convert expression to float
您不能将模块 math
中的函数与 sympy
表达式混合使用。 math
中的函数期望将浮点数作为输入,而不是表达式。
而是使用 sympy.log
。
import sympy
x = sympy.Symbol('x', real=True)
print('log(x): ', sympy.log(x))
print('log(exp(x)): ', sympy.simplify(sympy.log(sympy.exp(x))))
print('log10(x): ', sympy.log(x, 10))
print('log10(10**x): ', sympy.simplify(sympy.log(10**x, 10)))
输出:
log(x): log(x)
log(exp(x)): x
log10(x): log(x)/log(10)
log10(10**x): x