作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试编写一段 python 脚本,以在土木工程中出现的某些水力问题中自动执行一项相当耗时的任务。
方程式来自 Colebrook-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()
它可以完成这项工作。
提前致谢!
最佳答案
不要执行 from math import *
。这是使用 math 模块中的函数修改您的命名空间,这些函数不适用于 SymPy 表达式(它们仅适用于 float )。在本例中,log10
来自数学。只需执行 from sympy import *
,或者更好,如果您正在编写脚本,请显式导入您使用的所有内容。 log10(x)
的 SymPy 等价物是 log(x, 10)
。
关于python - 非线性方程求解 Sympy Python for hydraulics - Need resolve TypeError ("can' t convert expression to float",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26289087/
我正在尝试编写一段 python 脚本,以在土木工程中出现的某些水力问题中自动执行一项相当耗时的任务。 方程式来自 Colebrook-White,如下所示: 我写了下面的代码: from math
我是一名优秀的程序员,十分优秀!