2014-02-28 127 views
3

我写了一个简单的Python代码来解决一定的液压式(该Manning's equation):为什么这个Python代码给我错误的答案?

import math 

def mannings(units,A,P,S,n): 
    if units=='SI': 
     k=1.0 
    elif units=='US': 
     k=1.49 
    R=A/P 
    V=(k/n)*(math.pow(R,(2/3)))*(math.sqrt(S)) 
    Q=A*V 
    return R,V,Q 

在上面的代码中,速度VknRS计算。速度然后用于通过乘以区域A来计算排放Q。用户输入单位约定,A,P,Snk是根据单位惯例决定的。

当我运行功能使用mannings('US',1.0618,2.7916,0.02,0.015),我得到(0.38035535176959456, 14.047854719572745, 14.916012141242343)R值与电子表格中计算得出的R相匹配,但VQ的方式不同。实际的V应该是7.374638178Q应该是7.830634155

如果有人能告诉我这里出了什么问题,那会很棒。这是一个非常简单的公式,我猜测它应该很容易。

+0

请注意:或许'k/n * R **(2.0/3)* S ** .5'比拼出'math.pow'和'math.swrt'更清晰。 – Hyperboreus

回答

14

你的问题是,2/3是一个整数除法,因此评估为0。你想2.0/3强制一个浮点除法。或者在您的文件的顶部包含from __future__ import division以在Python 2.x中使用Python 3样式部分。

假设您不使用__future__解决方案,您还需要将您的R = A/P编写为例如。 R = float(A)/P,否则,如果AP都是整数,则R也将是整数。

+0

谢谢!这解决了它! –

相关问题