diff --git a/.gitignore b/.gitignore index f5e96db..2c2a275 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -venv \ No newline at end of file +venv +*.xls \ No newline at end of file diff --git a/auto_differentiation.py b/auto_differentiation.py index cf55d43..d1213ff 100644 --- a/auto_differentiation.py +++ b/auto_differentiation.py @@ -1,4 +1,5 @@ # 利用自动微分计算 +import datetime from typing import List import sympy @@ -91,21 +92,21 @@ def evaluate_d_delta_l_i_sigma_i(val_delta_l_li, val_sigma_i): math.atan(h_array[i] / l_array[i]), ) ) - manual_val = exp.manual_diff_delta_li_sigma_i( - h_array[i], - l_array[i], - lambda_m_data, - lambda_i_array[i], - val_sigma_i[i], - sigma_m_data, - alpha_data, - t_data, - t_e_data, - t_m_data, - elastic_data, - ) - if math.fabs(val - manual_val) > 1e-5: - raise Exception("d_delta_l_i_sigma_i 自动和手动微分不匹配") + # manual_val = exp.manual_diff_delta_li_sigma_i( + # h_array[i], + # l_array[i], + # lambda_m_data, + # lambda_i_array[i], + # val_sigma_i[i], + # sigma_m_data, + # alpha_data, + # t_data, + # t_e_data, + # t_m_data, + # elastic_data, + # ) + # if math.fabs(val - manual_val) > 1e-5: + # raise Exception("d_delta_l_i_sigma_i 自动和手动微分不匹配") val_list.append(val) return val_list @@ -146,21 +147,21 @@ def evaluate_d_sigma_i1_d_delta_l_i(val_delta_l_li, val_sigma_i): ) ) - manual_val = exp.manual_diff_sigma_i1_d_l_i( - h_array[i], - l_array[i], - h_array[i + 1], - l_array[i + 1], - string_g / conductor_n, - area_data, - lambda_i_array[i], - lambda_i_array[i + 1], - val_sigma_i[i], - string_length, - math.fsum(val_delta_l_li[0 : i + 1]), - ) - if math.fabs(manual_val - _val) > 1e-5: - raise Exception("d_sigma_i1_delta_L_i 自动和手动微分不匹配") + # manual_val = exp.manual_diff_sigma_i1_d_l_i( + # h_array[i], + # l_array[i], + # h_array[i + 1], + # l_array[i + 1], + # string_g / conductor_n, + # area_data, + # lambda_i_array[i], + # lambda_i_array[i + 1], + # val_sigma_i[i], + # string_length, + # math.fsum(val_delta_l_li[0 : i + 1]), + # ) + # if math.fabs(manual_val - _val) > 1e-5: + # raise Exception("d_sigma_i1_delta_L_i 自动和手动微分不匹配") col.append(_val) row.append(col) return sympy.Matrix(row) @@ -196,13 +197,14 @@ def evaluate_d_sigma_i1_d_delta_sigma_i(val_delta_li): def solve(): + starttime = datetime.datetime.now() # 初始化 - val_delta_li = [0.1 for _ in range(span_count)] + val_delta_li = [data.string_length / (span_count + 1) for _ in range(span_count)] val_sigma_i = [sigma_m_data for _ in range(span_count)] loop = 0 while True: loop += 1 - print("第{loop}次迭代".format(loop=loop)) + # print("第{loop}次迭代".format(loop=loop)) if loop >= 20: break # A为dΔli/dli @@ -274,7 +276,7 @@ def solve(): abs_min.sort() if abs_min[-1] < 1e-5: break - print("最大偏差{max_dx}".format(max_dx=abs_min[-1])) + # print("最大偏差{max_dx}".format(max_dx=abs_min[-1])) # 更新变量 for i in range(span_count): val_delta_li[i] += x_list[i] @@ -286,6 +288,9 @@ def solve(): # print(val_delta_li) # print(val_sigma_i) verify(val_delta_li, val_sigma_i) + endtime = datetime.datetime.now() + # print('执行时间{t}'.format(t=(endtime-starttime).microseconds/1000)) + pass def verify(val_delta_li, val_sigma_i): diff --git a/data.py b/data.py index a484203..219e945 100644 --- a/data.py +++ b/data.py @@ -1,35 +1,98 @@ -# loop_end = 10000000 # 最大循环次数 -loop_end = 1000000 # 最大循环次数 +# # loop_end = 10000000 # 最大循环次数 +# loop_end = 1000000 # 最大循环次数 +# # 架线时的状态 +# # 取外过无风 +# string_length = 9.2 # 串长 单位m +# string_g = 60 * 9.8 # 串重 单位N +# t_m = 15 # 导线架设时的气温。单位°C +# t_e = 20 # 架线时考虑初伸长的降温,取正值。单位°C +# alpha = 0.0000155 # 导线膨胀系数 1/°C +# elastic = 95900 # 弹性系数 N/mm2 +# area = 154.48 # 导线面积 mm2 +# lambda_m = 14.8129 / area # 导线比载 N/(m.mm) +# lambda_i_array = [ +# lambda_m * 0.9, +# lambda_m * 1.2, +# lambda_m, +# lambda_m, +# lambda_m, +# lambda_m * 0.9, +# lambda_m * 1.5, +# lambda_m, +# lambda_m, +# lambda_m, +# lambda_m, +# lambda_m, +# lambda_m, +# lambda_m * 0.9, +# lambda_m * 1.3, +# ] +# # 取400m代表档距下 +# sigma_m = 28517 / area # 架线时,初伸长未释放前的最低点水平应力。单位N/mm2 +# span_count = 14 # 几个档距 +# # n个档距,n-1个直线塔 +# h_array = [ +# 0, +# 0, +# 0, +# 0, +# 0, +# 0, +# 0, +# 0, +# 0, +# 0, +# 0, +# 0, +# 0, +# 0, +# 0, +# ] +# l_array = [ +# 400, +# 300, +# 300, +# 500, +# 300, +# 400, +# 300, +# 300, +# 500, +# 300, +# 300, +# 500, +# 300, +# 400, +# 300, +# ] +# t = 15 +# epsilon = 1e-4 # 收敛判据 +# conductor_n = 6 # 导线分裂数 + + +loop_end = 5000000 # 最大循环次数 # 架线时的状态 # 取外过无风 -string_length = 9.2 # 串长 单位m -string_g = 60 * 9.8 # 串重 单位N -t_m = 15 # 导线架设时的气温。单位°C -t_e = 20 # 架线时考虑初伸长的降温,取正值。单位°C +string_length = 0.5 # 串长 单位m +string_g = 30 * 9.8 # 串重 单位N +t_m = -25 # 导线架设时的气温。单位°C +t_e = 0 # 架线时考虑初伸长的降温,取正值。单位°C alpha = 0.0000155 # 导线膨胀系数 1/°C elastic = 95900 # 弹性系数 N/mm2 area = 154.48 # 导线面积 mm2 -lambda_m = 14.8129 / area # 导线比载 N/(m.mm) +lambda_m = 7.3256 / area # 导线比载 N/(m.mm) lambda_i_array = [ - lambda_m * 0.9, - lambda_m * 1.2, - lambda_m, - lambda_m, - lambda_m, - lambda_m * 0.9, - lambda_m * 1.5, - lambda_m, - lambda_m, - lambda_m, - lambda_m, - lambda_m, - lambda_m, - lambda_m * 0.9, - lambda_m * 1.3, + 14.7012 / area, + 14.7012 / area, + 14.7012 / area, + 8.8007 / area, + 14.7012 / area, + 14.7012 / area, + 14.7012 / area, ] # 取400m代表档距下 -sigma_m = 28517 / area # 架线时,初伸长未释放前的最低点水平应力。单位N/mm2 -span_count = 14 # 几个档距 +sigma_m = 17449 / area # 架线时,初伸长未释放前的最低点水平应力。单位N/mm2 +span_count = 7 # 几个档距 # n个档距,n-1个直线塔 h_array = [ 0, @@ -39,32 +102,16 @@ h_array = [ 0, 0, 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, ] l_array = [ - 400, - 300, - 300, - 500, - 300, - 400, - 300, - 300, - 500, - 300, - 300, - 500, - 300, - 400, - 300, + 703, + 720, + 587, + 620, + 539, + 450, + 611, ] -t = 15 +t = 40 epsilon = 1e-4 # 收敛判据 -conductor_n = 6 # 导线分裂数 +conductor_n = 1 # 导线分裂数 diff --git a/exp.py b/exp.py index 2bed34b..02aecb3 100644 --- a/exp.py +++ b/exp.py @@ -149,7 +149,7 @@ def manual_diff_sigma_i1_d_l_i( + sigma_i * h_i / l_i + sigma_i / b_i * ((stringlen ** 2 - b_i ** 2) ** 0.5) ) - B = ((stringlen ** 2 - b_i ** 2) ** 0.5)/b_i + h_i1 / l_i1 + B = ((stringlen ** 2 - b_i ** 2) ** 0.5) / b_i + h_i1 / l_i1 dA_d_delta_L1 = ( sigma_i * ( @@ -169,6 +169,7 @@ def manual_diff_sigma_i1_d_l_i( _t = -(dA_d_delta_L1 * B - A * dB_d_delta_L1) / (B ** 2) return _t + def get_lambdify_d_delta_l_i_sigma_i(_d_delta_l_i_sigma_i): ( delta_l_i, @@ -200,7 +201,7 @@ def get_lambdify_d_delta_l_i_sigma_i(_d_delta_l_i_sigma_i): """ ) return sympy.lambdify( - ( + [ delta_l_i, l_i, lambda_i, @@ -213,11 +214,12 @@ def get_lambdify_d_delta_l_i_sigma_i(_d_delta_l_i_sigma_i): sigma_m, _sigma_i, beta_i, - ), + ], _d_delta_l_i_sigma_i, ) -def get_lambdify_d_sigma_i1_d_l_i(_d_sigma_i1_d_l_i,delta_Li): + +def get_lambdify_d_sigma_i1_d_l_i(_d_sigma_i1_d_l_i, delta_Li): ( G_i, A, @@ -251,7 +253,7 @@ def get_lambdify_d_sigma_i1_d_l_i(_d_sigma_i1_d_l_i,delta_Li): ) return sympy.lambdify( - ( + [ G_i, A, lambda_i, @@ -266,6 +268,6 @@ def get_lambdify_d_sigma_i1_d_l_i(_d_sigma_i1_d_l_i,delta_Li): beta_i, beta_i1, *delta_Li, - ), + ], _d_sigma_i1_d_l_i, - ) \ No newline at end of file + ) diff --git a/main.py b/main.py index 0af69e9..cfc5cdb 100644 --- a/main.py +++ b/main.py @@ -3,6 +3,7 @@ import math import data +import numpy as np # h_i 悬点高差 # l_i 悬点档距 @@ -107,7 +108,7 @@ def cal_loop(): b_i = 0 # 一次增加0.1N sigma_0 = sigma_0 + 0.01 / data.area - sigma_array = [sigma_0 for j in range(span_count)] + sigma_array = [sigma_0 for _ in range(span_count)] delta_l_i_array = [] for i in range(span_count): h_i = h_array[i] @@ -199,19 +200,19 @@ def verify( sigma_array: [float], delta_l_i_array: [float], lambda_array: [float], - t_i, - alpha, - elastic, - t_e, - lambda_m, - t_m, - sigma_m, - epsilon=1e-4, + t_i: float, + alpha: float, + elastic: float, + t_e: float, + lambda_m: float, + t_m: float, + sigma_m: float, + epsilon: float = 1e-4, ): # 用新版大手册p329页(5-61)第一个公式校验 b_i = 0 - if math.fabs((math.fsum(delta_l_i_array)))>1e-5: - print('偏移累加不等于0') + if math.fabs((math.fsum(delta_l_i_array))) > 1e-5: + print("偏移累加不等于0") return for i in range(len(delta_l_i_array)): sigma_i = sigma_array[i] @@ -260,30 +261,18 @@ def verify( print("!!!应力等式不满足") return print("等式满足。") - # print('sigma') - # print(sigma_array) - print('delta_li') + print("sigma") + print(np.array(sigma_array) * area) + print("delta_li") print(delta_l_i_array) + print("串偏移") + b_i = 0 + b_i_list = [] + for l_i in delta_l_i_array[:-1]: + b_i += l_i + b_i_list.append(b_i) + print(b_i_list) if __name__ == "__main__": cal_loop() -import sympy - -# sympy.init_printing(use_unicode=False) -# a, b, c, d = sympy.symbols("a b c d") -# m, w, n, t = sympy.symbols("m w n t") -# b1, b2, b3 = sympy.symbols("b1 b2 b3") -# x = sympy.symbols("x") -# fx = (a * sympy.exp(-x / b1) + b * sympy.exp(-t / b1) + c) * sympy.cos( -# w * x + d -# ) + m * sympy.exp(-t / b3) * sympy.sin(w * x + n) -# int_f = sympy.integrate(fx, x) -# sympy.pprint(int_f, use_unicode=True) -# sympy.print_mathml(int_f) -# import sympy.matrices -# u_list=sympy.symbols("u1:101") -# sympy.pprint(u_list) -# m=sympy.Matrix(u_list) -# sympy.pprint(m) -# print("Finished.")