我正试图写一段python脚本来自动处理一些在土木工程中出现的水力学问题中非常耗时的任务。在
公式来自科尔布鲁克-怀特,如下所示:
我写了以下代码:
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 \
)
但它给出了一个错误:
^{pr2}$因为我是新来的,所以我不能发布一张等式的图片。在
由于sqrt(lambda)
在方程的两边,所以我认为必须用迭代法来求解,但我不知道怎么去做。。。在我的计算器(tivoyage200)上,我通常使用nSolve()
,它完成了这项工作。在
提前谢谢!在
不要做
from math import *
。这是在用math模块中的函数大嚼你的命名空间,这些函数不适用于SymPy表达式(它们只适用于float)。在本例中,log10
来自数学。只需执行from sympy import *
,或者更好,如果您正在编写脚本,请显式导入您使用的所有内容。log10(x)
的同调等价物是log(x, 10)
。在您仍在使用
log10
,而不是log( expr, 10 )
。纠正这一点并使用平分与nsolve
起作用:请参见
help( mpmath.findroot )
以了解除对分之外的其他解算器选项。在谢谢你的帮助! 在您的帮助下,与stackoverflow上的其他线程一起,我已经能够解决这个问题。在
这是我最后的,解决了,代码:
相关问题 更多 >
编程相关推荐