我写了一个简单的Python代码来解决某个水力公式(Manning方程):
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
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,速度V是从所计算的k,n,R和S.然后使用速度Q通过乘以面积来计算放电A.用户输入单元惯例,A,P,S和n.k是在单位惯例的基础上决定的.
当我使用该功能时mannings('US',1.0618,2.7916,0.02,0.015),我得到了(0.38035535176959456, 14.047854719572745, 14.916012141242343).该R值与R电子表格中计算的值相匹配,但是V并且Q相反.实际V应该7.374638178
和Q应该是7.830634155.
如果有人能告诉我这里出了什么问题,那就太棒了.这是一个非常简单的公式,我猜它应该很容易.
kin*_*all 14
你的问题是2/3整数除法,因此求值为0.你想2.0/3强制进行浮点除法.或者from __future__ import division在文件的顶部包含Python 2.x中使用Python 3样式的部门.
假设您不使用该__future__解决方案,您还需要编写R = A / P例如,R = float(A) / P因为否则,如果A和P都是整数,R也将是一个整数.