为什么我从函数结果中得到错误的值?

时间:2019-03-28 11:58:11

标签: python python-3.x numpy scipy physics

我是python编程的新手,我试图用python编写代码来计算规划工具的抵抗力和力量。我必须计算出满载和空载船舶的阻力和功率所需的一些变量。我得到了一些值的正确结果(直到lambda0和lambda2,我通过手工计算检查了python的结果)。但是在修剪角度计算中,我得到了错误的值(tau1,tau2)。对于tau计算,我使用了一个具有三个变量(C_l0,lambda0,Cv_si)的函数,所有变量的形式分别为array(37,)(1,)(37,)。 我仔细检查了tau方程,并正确编写了公式,我认为问题可能出在数组上。另外,当我将t_rad的结果用于速度公式(Vb_1)时,出现以下错误(TypeError:只有size-1数组可以转换为Python标量),然后尝试使用t_rad数组选择第一个值[:1],但我不确定这是否正确。还有其他方法可以使用获得的t_rad而不选择仅数组的第一个值(也不会出现错误)吗?

def lambda0(l0, Cv_si):
    return ((LCG / B) / (0.75 - (1.0 / (((5.236 * Cv_si**2) / l0**2.0) + 2.4)))) - l0

l0_try = 3.0
l0 = np.zeros(len(Cv_si))
for i in range(len(Cv_si)):
    l0[i] = (fsolve(lambda0, l0_try,  Cv_si[i]))
lambda0 = l0[:1]       
lambda0a = l0

""" Calculations for trim anle (t), aver. bottom velocity (V1), 
Raynolds Numb. (Rn), Skin friction coeff. (C_f), friction drag (D_f),
and total Resistance (D_t) """

#tau calculation for full departure
def tau(C_l0, lambda0, Cv_si):
    return ((C_l0) / (0.012 * lambda0**0.5)) + ((0.0055 * lambda0**2.5) / (Cv_si**2.0))

tau1 = tau(C_l0, lambda0, Cv_si)**(1.0/1.1)
t_deg = tau1

t_rad = t_deg * (np.pi/180)

#t_deg = (C_l0 / (0.012 * lambda0**0.5) + ((0.0055 * lambda0**2.5) / (Cv_si**2)))**(1 / 1.1)
t_deg1 = t_deg[:1]   #choose the first value from t_deg array
#t_rad = t_deg * (mt.pi / 180)
t_rad1 = t_rad[:1]  #choose the first value from t_rad array

f_beta1 = (1 - 0.0065 * beta * (0.012 * lambda0**0.5 * t_rad1**1.1)**(-0.4) * mt.cos(beta))

Vb_1 = Vs_si * (np.sqrt(1 - ((0.012 * t_rad1**1.1)/(lambda0**0.5 * mt.cos(t_rad1))))) * f_beta1

例如,我期望得到的tau1的结果为2.3094,但获得的值为9.024

0 个答案:

没有答案