首页 > 解决方案 > 列表上的定点迭代(colebrook)

问题描述

我需要使用 Colebrook-Equation 计算摩擦系数,但与大多数情况不同,它需要超过一个长度,因此雷诺数是一个列表,而不是浮点数。

我基本上使用了这个家伙推荐的东西(定点迭代),特别是因为它将成为一个更大的程序的一部分,当我在 Matlab 中执行它时它不是很快。

对于我对该代码的解释,我将自己定位于 fixed_point 文档的示例,因为在那里它们还将列表形式的参数传递给函数(或实际上是求解器)。v是一个包含 1000 个元素的列表。

k = 0.000045
d = 0.03
reynolds = d/10**(-6)*v

def f(x, Re):
    LHS = -2*np.log10((2.51/(Re*np.sqrt(x))) + (k/(3.71*d)))
    return 1/LHS**2 

x0 = [0.02]*1000

Re = np.array(reynolds)
result = fixed_point(f,x0, args = Re)

print(result) 

我确保起始值和雷诺参数具有相同的长度,但我仍然收到错误消息。

File " ... ", line 72, in <module>
result = fixed_point(f,x0, args = Re)

...

TypeError: f() takes 2 positional arguments but 1001 were given

我觉得我在这里基本上错过了一些东西,尽管我坐在上面的时间比这个问题应该给我的时间更长。谢谢你的帮助,

标签: pythonscipyiterationphysics

解决方案


推荐阅读