import sympy import math # h 悬点高差 # l_i 悬点档距 # alpha 导线膨胀系数 1/°C # elastic 弹性系数 N/mm2 # t_e 架线时考虑初伸长的降温,取正值。单位°C # lambda_i 计算不平衡张力时导线比载 N/(m.mm) # sigma_i 计算不平衡张力时最低点水平应力 单位N/mm2 # t_i 计算不平衡张力时导线温度 单位°C # lambda_m 导线架线时时导线比载 N/(m.mm) # sigma_m 导线架线时时最低点水平应力 单位N/mm2 # t_m 导线架线时时导线温度 单位°C def delta_li(): ( delta_l_i, l_i, lambda_i, alpha, E, t_e, t_i, lambda_m, t_m, sigma_m, sigma_i, beta_i, ) = sympy.symbols( """ delta_l_i, l_i, lambda_i, alpha, E, t_e, t_i, lambda_m, t_m, sigma_m, sigma_i, beta_i,""" ) _delta_li = delta_l_i - ( l_i / ((sympy.cos(beta_i) ** 2) * (1 + (lambda_i * l_i / sigma_i) ** 2 / 8)) * ( (l_i * sympy.cos(beta_i)) ** 2 / 24 * ((lambda_m / sigma_m) ** 2 - (lambda_i / sigma_i) ** 2) + ((sigma_i - sigma_m) / E / sympy.cos(beta_i)) + alpha * (t_i + t_e - t_m) ) ) return _delta_li # area 导线截面 单位mm2 # sigma_i 第i档内水平应力 单位N/mm2 # b_i 悬垂串沿线路方向水平偏移距离,沿大号方向为正,反之为负。 单位m # stringlen_i 第i基直线塔串长 单位m # G_i 第i基直线塔串重 单位N # h_i 悬垂串处千中垂位置时,,第 i 基对第 i-1 杆塔上导线悬挂点间的高差大号比小号杆塔悬挂点高者h本身为正值,反之为负值。 # lambda_i 第i档导线比载 N/(m.mm) # h_i1 悬垂串处千中垂位置时,第 i+1 基对第 i 杆塔上导线悬挂点间的高差大号比小号杆塔悬挂点高者h本身为正值,反之为负值。 # lambda_i1 def fun_sigma_i1(delta_Li): ( G_i, A, lambda_i, lambda_i1, sigma_i, h_i, h_i1, l_i, l_i1, stringlen_i, sigma_i1, beta_i, beta_i1, ) = sympy.symbols( """ G_i, A, lambda_i, lambda_i1, sigma_i, h_i, h_i1, l_i, l_i1, stringlen_i, sigma_i1, beta_i, beta_i1 """ ) def b_i(): _t = sympy.Float(0) for f in delta_Li: _t += f return _t _sigma_i1 = sigma_i1 - ( ( G_i / 2 / A # G_i传入时已考虑导线分裂数 + lambda_i * l_i / 2 / sympy.cos(beta_i) + lambda_i1 * l_i1 / 2 / sympy.cos(beta_i1) + sigma_i * h_i / l_i ) + sigma_i / b_i() * sympy.sqrt(stringlen_i ** 2 - b_i() ** 2) ) / (sympy.sqrt(stringlen_i ** 2 - b_i() ** 2) / b_i() + h_i1 / l_i1) return _sigma_i1 def manual_diff_delta_li_sigma_i( h_i, l_i, lambda_m, lambda_i, sigma_i, sigma_m, alpha, t_i, t_e, t_m, E ): beta_i = math.atan(h_i / l_i) A = ( (l_i * math.cos(beta_i)) ** 2 / 24 * ((lambda_m / sigma_m) ** 2 - (lambda_i / sigma_i) ** 2) + (sigma_i - sigma_m) / E / math.cos(beta_i) + alpha * (t_i + t_e - t_m) ) B = 1 + (lambda_i * l_i / sigma_i) ** 2 / 8 dA_dsigma_i = ((l_i * math.cos(beta_i)) ** 2) / 24 * 2 * lambda_i ** 2 * ( sigma_i ** (-3) ) + 1 / E / math.cos(beta_i) dB_dsigma_i = -2 * (lambda_i * l_i) ** 2 / 8 * (sigma_i ** (-3)) _t = -l_i / (math.cos(beta_i) ** 2) * (dA_dsigma_i * B - A * dB_dsigma_i) / (B ** 2) return _t def manual_diff_sigma_i1_d_l_i( h_i, l_i, h_i1, l_i1, Gi, A, lambda_i, lambda_i1, sigma_i, stringlen, b_i ): beta_i = math.atan(h_i / l_i) beta_i1 = math.atan(h_i1 / l_i1) A = ( Gi / 2 / A + lambda_i * l_i / 2 / math.cos(beta_i) + lambda_i1 * l_i1 / 2 / math.cos(beta_i1) + 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 dA_d_delta_L1 = ( sigma_i * ( -((stringlen ** 2 - b_i ** 2) ** -0.5) * (b_i ** 2) - (stringlen ** 2 - b_i ** 2) ** 0.5 ) / (b_i ** 2) ) dB_d_delta_L1 = ( 1 / (b_i ** 2) * ( -((stringlen ** 2 - b_i ** 2) ** -0.5) * (b_i ** 2) - (stringlen ** 2 - b_i ** 2) ** 0.5 ) ) _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, l_i, lambda_i, alpha, E, t_e, t_i, lambda_m, t_m, sigma_m, _sigma_i, beta_i, ) = sympy.symbols( """ delta_l_i, l_i, lambda_i, alpha, E, t_e, t_i, lambda_m, t_m, sigma_m, sigma_i, beta_i """ ) return sympy.lambdify( [ delta_l_i, l_i, lambda_i, alpha, E, t_e, t_i, lambda_m, t_m, 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): ( G_i, A, lambda_i, lambda_i1, _sigma_i, h_i, h_i1, l_i, l_i1, stringlen_i, _sigma_i1, beta_i, beta_i1, ) = sympy.symbols( """ G_i, A, lambda_i, lambda_i1, sigma_i, h_i, h_i1, l_i, l_i1, stringlen_i, sigma_i1, beta_i, beta_i1, """ ) return sympy.lambdify( [ G_i, A, lambda_i, lambda_i1, _sigma_i, h_i, h_i1, l_i, l_i1, stringlen_i, _sigma_i1, beta_i, beta_i1, *delta_Li, ], _d_sigma_i1_d_l_i, )