From 2d728e7439d002ec9db8ac48bbdc897a359000eb Mon Sep 17 00:00:00 2001 From: facat Date: Sun, 28 Jun 2020 13:39:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=94=B6=E6=95=9B=E5=88=A4?= =?UTF-8?q?=E6=8D=AE=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data.py | 11 ++++++----- main.py | 56 +++++++++++++++++++++++++++++++------------------------- 2 files changed, 37 insertions(+), 30 deletions(-) diff --git a/data.py b/data.py index edc5d69..e42cc84 100644 --- a/data.py +++ b/data.py @@ -1,4 +1,4 @@ -loop_end = 100000 # 最大循环次数 +loop_end = 1000000 # 最大循环次数 # 架线时的状态 # 取外过无风 string_length = 9.2 # 串长 单位m @@ -11,8 +11,9 @@ area = 154.48 # 导线面积 mm2 lambda_m = 14.8129 / area # 导线比载 N/(m.mm) # 取400m代表档距下 sigma_m = 28517 / area # 架线时,初伸长未释放前的最低点水平应力。单位N/mm2 -span_count = 3 # 几个档距 +span_count = 4 # 几个档距 # n个档距,n-1个直线塔 -h_array = [0, 0, 0] -l_array = [200, 400, 600] -t_array = [15, 15, 15] \ No newline at end of file +h_array = [0, 0, 0, 0] +l_array = [200, 300, 1400, 500] +t_array = [15, 15, 15, 15] +epslon = 1e-3 # 收敛判据 diff --git a/main.py b/main.py index dda4259..690f4dd 100644 --- a/main.py +++ b/main.py @@ -66,7 +66,7 @@ def fun_sigma_i1( h_i1: float, l_i1: float, lambda_i1: float, -): +) -> float: beta_i = math.atan(h_i / l_i) beta_i1 = math.atan(h_i1 / l_i1) _sigma_i1 = ( @@ -100,12 +100,13 @@ def cal_loop(): h_array = data.h_array l_array = data.l_array t_array = data.t_array - lambda_array = [lambda_m, lambda_m, lambda_m] + lambda_array = [lambda_m for j in range(span_count)] loop_count = 1 sigma_0 = sigma_m * 0.8 while True: - sigma_0 = sigma_0 + 0.001 - sigma_array = [sigma_0, 0, 0] + # 一次增加0.1N + sigma_0 = sigma_0 + 0.1 / data.area + sigma_array = [sigma_0 for j in range(span_count)] b_i = 0 delta_l_i_array = [] for i in range(span_count - 1): @@ -134,24 +135,28 @@ def cal_loop(): h_i1 = h_array[i + 1] l_i1 = l_array[i + 1] lambda_i1 = lambda_array[i + 1] - sigma_i1 = fun_sigma_i1( - area, - sigma_i, - b_i, - length_i, - g_i, - h_i, - l_i, - lambda_i, - h_i1, - l_i1, - lambda_i1, - ) + try: + sigma_i1 = fun_sigma_i1( + area, + sigma_i, + b_i, + length_i, + g_i, + h_i, + l_i, + lambda_i, + h_i1, + l_i1, + lambda_i1, + ) + except ValueError: + break + pass sigma_array[i + 1] = sigma_i1 # print("第{loop_count}轮求解。".format(loop_count=loop_count)) # print(b_i) loop_count += 1 - if math.fabs(b_i) < 1e-5: + if math.fabs(b_i) < data.epslon: print("迭代{loop_count}次找到解。".format(loop_count=loop_count)) print("悬垂串偏移累加bi为{b_i}".format(b_i=b_i)) for i in range(span_count): @@ -173,7 +178,7 @@ def cal_loop(): t_e, lambda_m, t_m, - sigma_m + sigma_m, ) break if loop_count >= loop_end: @@ -202,7 +207,7 @@ def verify( sigma_m, ): # 用新版大手册p329页(5-61)第一个公式校验 - b_i=0 + b_i = 0 for i in range(len(delta_l_i_array)): sigma_i = sigma_array[i] sigma_i1 = sigma_array[i + 1] @@ -230,7 +235,7 @@ def verify( sigma_m, ) if math.fabs(cal_delta_l_i - _delta_l_i) > 1e-4: - print('!!!偏移等式不满足。') + print("!!!偏移等式不满足。") beta_i = math.atan(h_i / l_i) beta_i1 = math.atan(h_i1 / l_i1) w_i = ( @@ -238,10 +243,11 @@ def verify( + sigma_i * h_i / l_i + (lambda_i1 * l_i1 / 2 / math.cos(beta_i1) - sigma_i1 * h_i1 / l_i1) ) - b_i+=delta_l_i_array[i] - right_equ = sigma_i + b_i / math.sqrt( - string_length ** 2 - b_i ** 2 - ) * (string_g / 2 / area + w_i) + b_i += delta_l_i_array[i] + right_equ = sigma_i + b_i / math.sqrt(string_length ** 2 - b_i ** 2) * ( + string_g / 2 / area + w_i + ) + # TODO 等式允许误差是否可调? if math.fabs(right_equ - left_equ) > 1e-4: print(math.fabs(right_equ - left_equ)) print("!!!应力等式不满足")