首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于水力学的求解Sympy的非线性方程-需要解析TypeError(“不能将表达式转换为浮点”)

用于水力学的求解Sympy的非线性方程-需要解析TypeError(“不能将表达式转换为浮点”)
EN

Stack Overflow用户
提问于 2014-10-09 22:38:04
回答 3查看 1.3K关注 0票数 4

我正在尝试编写一段python脚本来自动化一些在土木工程中发生的水力学问题中相当耗时的任务。

方程来自Colebrook,如下所示:

我编写了以下代码:

代码语言:javascript
复制
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                                           \
     )

但它给出了一个错误:

代码语言:javascript
复制
   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-Voyage200)上,我通常使用nSolve()并完成这项工作。

提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-13 15:31:59

您仍然在使用log( expr, 10 ).而不是log10纠正这种情况,并使用二分法与nsolve一起工作:

代码语言:javascript
复制
>>> 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')

除二分法外,请参见help( mpmath.findroot )中的其他求解器选项。

票数 1
EN

Stack Overflow用户

发布于 2014-10-11 00:04:15

不要做from math import *。这是用来自数学模块的函数来处理您的命名空间,这些函数不适用于SymPy表达式(它们只适用于浮点数)。在这种情况下,log10来自数学。只需执行from sympy import *,或者更好的是,如果您正在编写脚本,则显式导入您使用的所有内容。与SymPy等价的log10(x)log(x, 10)

票数 4
EN

Stack Overflow用户

发布于 2014-10-15 16:49:28

谢谢你的帮助!在您的帮助下,与这里的其他线程在堆栈溢出,我已经能够解决这个问题。

这是我的最后一个解决方案,密码:

代码语言:javascript
复制
def f(x):
    return (-2*numpy.log10((2.51/(Re*numpy.sqrt(x))) + (k/(3.7*d))) - 1.0/numpy.sqrt(x))

lamb = float(fsolve(f, 0.02))
print "Lambda = %f " % lamb
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26289087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档