2

我正在尝试编写 Colebrook 方程的近似值以获得摩擦系数。我在 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)

但这也行不通。

4

4 回答 4

0

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

于 2020-01-21T15:49:20.380 回答
0

我不知道 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
于 2020-01-21T15:46:26.020 回答
0

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))))))

在 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)

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

你需要类似的东西(我没有在这里检查你的等式,因为我不知道你要去哪一个):

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)

希望有帮助。

于 2020-01-21T16:10:13.450 回答
0
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)

Output: 0.05073525684035217

import colebrook
Re = 2300
eD = 0.0009 
factor = colebrook.sjFriction( Re, eD)
print(factor)

Output: 0.0495

如需进一步帮助,您可以访问https://pypi.org/project/colebrook/

于 2020-01-21T16:11:47.900 回答