我正在尝试编写一段python脚本,以便在土木工程中出现的某些液压问题中自动执行相当耗时的任务.
等式来自Cole*-White,如下:
我写了以下代码:
from math import *
from sympy import *
e = 0.2
d = 0.2
v = 0.00000131
q = 10
s = ( pi * d ** 2 ) / 4
u = q / s
re = u * d / v
lamb = symbols( 'lamb' )
solve( 1 / sqrt( lamb ) \
+ 2 * log10( e / ( 3.7 * d ) \
+ 2.51 / ( re * sqrt( lamb ) ) \
), \
lamb \
)
但它给出了错误:
File "hg.py", line 12, in <module>
solve(1/sqrt(lamb) + 2*log10(k/(3.7*d) + 2.51/(re*sqrt(lamb))),lamb)
File "/home/luis/Documents/sympy/sympy/core/expr.py", line 211, in __float__
raise TypeError("can't convert expression to float")
TypeError: can't convert expression to float
我无法发布关于等式看起来如何的图片,因为我是新的.
由于sqrt(lambda)位于等式的两边,我认为它必须通过迭代方法解决,但我不知道该怎么做…在我的计算器(TI-Voyage 200)上我经常使用nSolve(),它完成了这项工作.
提前致谢!
解决方法:
您仍在使用log10而不是log(expr,10).更正并使用nsolve的二分法工作:
>>> eq = 1/sqrt(lamb) + 2*log(e/(3.7*d) + 2.51/(re*sqrt(lamb)), 10)
>>> nsolve(eq,lamb, (.1, 1.1), method='bisect')
mpf('0.77434599870454337')
有关除bisect之外的其他求解器选项,请参阅help(mpmath.findroot).