我需要输入python中Colebrook方程近似值中的摩擦因子

2024-09-28 22:41:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图对科尔布鲁克方程的近似值进行编码,以获得摩擦系数。我已经在Matlab中实现了这一点,但当涉及到python时,我的代码不起作用

import math
Re = 2300
eD=0.0009 
1/math.sqrt(friction)=-2*math.log10((((eD/3.7)+(2.51/Re))*(1.14-2*math.log10(((eD/2)+(21.25/Re**0.9))))))
print(friction)

我也试过这个

import math
def friction(Re, eD):
    eD= 0.0009
    Re= 2300
    f = -2*math.log10((((eD/3.7)+(2.51/Re))*(1.14-2*math.log10(((eD/2)+(21.25/Re**0.9))))))
    return 1/math.sqrt(f)

但这也不起作用


Tags: 代码importre编码returndefmathsqrt
3条回答

如果您只是想要这个值(而不是试图证明您自己可以解决它),那么python模块已经存在,请参阅:colebrook

我不知道科尔布鲁克方程,但假设这一行的公式:

1/math.sqrt(friction)=-2*math.log10((((eD/3.7)+(2.51/Re))*(1.14-2*math.log10(((eD/2)+(21.25/Re**0.9))))))

是正确的,我们可以重新安排

import math
Re = 2300
eD = 0.0009 
friction = (1/(-2*math.log10((((eD/3.7)+(2.51/Re))*(1.14-2*math.log10(((eD/2)+(21.25/Re**0.9))))))))**2
print(friction)

给我们

friction = 0.05073525684035217

科尔布鲁克方程有多种近似方法See here你指的是哪一个?这有助于更具体地了解您想要做什么

除此之外,这里还有一个简单的问题

1/math.sqrt(friction)=-2*math.log10((((eD/3.7)+(2.51/Re))*(1.14-2*math.log10(((eD/2)+(21.25/Re**0.9))))))

在Python(以及我使用过的大多数语言)中,不能用这种方式编写方程。计算机不会帮你解代数。如果你求解得到f=SomeEquation(),只有这样计算机才能真正为你计算

在第二个示例中,也存在一些问题

import math
def friction(Re, eD):
    eD= 0.0009
    Re= 2300
    f = -2*math.log10((((eD/3.7)+(2.51/Re))*(1.14-2*math.log10(((eD/2)+(21.25/Re**0.9))))))
    return 1/math.sqrt(f)

您已经定义了一个接受ReeD的函数,但随后立即在该函数中重新定义它们。如果您选择不传入这些变量,有一种方法可以为它们设置默认值,但我不认为这就是您在这里要做的。此外,(为了简洁起见,您可能已经省略了这一部分)您实际上从未调用过函数,这意味着您的脚本实际上从未做过任何事情

你需要这样的东西(我不会在这里检查你的等式,因为我不知道你要的是哪一个):

import math

# Function definition
def friction(Re, eD):
    f = -2*math.log10((((eD/3.7)+(2.51/Re))*(1.14-2*math.log10(((eD/2)+(21.25/Re**0.9))))))
    return 1/math.sqrt(f)

# Call your function with your desired values (arguments) and store the result in f
f = friction(2300, 0.0009)

希望这有帮助

相关问题 更多 >