Почему я получаю неправильные значения из результата функции? - PullRequest
0 голосов
/ 28 марта 2019

Я новичок в программировании на Python, и я пытаюсь написать код на Python, который рассчитывает сопротивление и силу планирования. Я должен рассчитать некоторые переменные, которые необходимы для сопротивления и мощности для корабля с полной нагрузкой, а также с пустой. Я получил правильные результаты для некоторых значений (до lambda0 и lambda2, я проверяю результаты из python с помощью ручных вычислений). Но я получаю неправильные значения для расчета угла наклона (tau1, tau2). Для вычисления тау я использовал функцию с тремя переменными (C_l0, lambda0, Cv_si), причем все переменные имеют форму массива (37,) (1,) (37,) соответственно. Я дважды проверяю уравнение тау, и формула написана правильно, я думаю, что проблема может возникнуть из массивов. Кроме того, когда я использую результаты от t_rad для формулы скорости (Vb_1), я получаю следующую ошибку (TypeError: только массивы размера 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

.
...