算法跑通了。
This commit is contained in:
parent
f38c73c001
commit
b926a0c5a7
162
main.py
162
main.py
|
|
@ -3,36 +3,162 @@
|
|||
|
||||
import math
|
||||
|
||||
# 架线时的状态
|
||||
t_m = 100 # 导线架设时的气温。单位°C
|
||||
sigma_m = 10 # 架线时,初伸长未释放前的最低点水平应力。单位N/mm2
|
||||
lambda_m = 10 # 导线比载 N/(m.mm)
|
||||
t_e = 25 # 架线时考虑初伸长的降温,取正值。单位°C
|
||||
|
||||
|
||||
# h_i 悬点高差
|
||||
# l_i 悬点档距
|
||||
# alpha 导线膨胀系数 1/°C
|
||||
# E 弹性系数 N/mm2
|
||||
# _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(h_i, l_i, lambda_i, alpha, E, t_i, sigma_i, lambda_m, t_m, sigma_m):
|
||||
beta_i = math.atan(h_i / l_i)
|
||||
t = (
|
||||
# _lambda_m 导线架线时时导线比载 N/(m.mm)
|
||||
# _sigma_m 导线架线时时最低点水平应力 单位N/mm2
|
||||
# _t_m 导线架线时时导线温度 单位°C
|
||||
|
||||
|
||||
def delta_li(
|
||||
h_i: float,
|
||||
l_i: float,
|
||||
lambda_i: float,
|
||||
_alpha: float,
|
||||
_elastic: float,
|
||||
_t_e: float,
|
||||
t_i: float,
|
||||
sigma_i: float,
|
||||
_lambda_m: float,
|
||||
_t_m: float,
|
||||
_sigma_m: float,
|
||||
) -> float:
|
||||
beta_i = math.atan(h_i / l_i) # 高差角
|
||||
_delta_li = (
|
||||
l_i
|
||||
/ ((math.cos(beta_i) ** 2) * (1 + (lambda_i * l_i / sigma_i) ** 2 / 8))
|
||||
* (
|
||||
(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)
|
||||
* ((_lambda_m / _sigma_m) ** 2 - (lambda_i / sigma_i) ** 2)
|
||||
+ ((sigma_i - _sigma_m) / _elastic / math.cos(beta_i))
|
||||
+ _alpha * (t_i + _t_e - _t_m)
|
||||
)
|
||||
)
|
||||
return _delta_li
|
||||
|
||||
|
||||
# area 导线截面 单位mm2
|
||||
# sigma_i 第i档内水平应力 单位N/mm2
|
||||
# b_i 悬垂串沿线路方向水平偏移距离,沿大号方向为正,反之为负。 单位m
|
||||
# length_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(
|
||||
area: float,
|
||||
sigma_i: float,
|
||||
b_i: float,
|
||||
length_i: float,
|
||||
g_i: float,
|
||||
h_i: float,
|
||||
l_i: float,
|
||||
lambda_i: float,
|
||||
h_i1: float,
|
||||
l_i1: float,
|
||||
lambda_i1: float,
|
||||
):
|
||||
beta_i = math.atan(h_i / l_i)
|
||||
beta_i1 = math.atan(h_i1 / l_i1)
|
||||
_sigma_i1 = (
|
||||
(
|
||||
g_i / 2 / area
|
||||
+ 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 * math.sqrt(length_i ** 2 - b_i ** 2)
|
||||
) / (math.sqrt(length_i ** 2 - b_i ** 2) / b_i + h_i1 / l_i1)
|
||||
return _sigma_i1
|
||||
|
||||
|
||||
# 求解循环。
|
||||
def cal_loop():
|
||||
loop_end = 100000 # 最大循环次数
|
||||
# 架线时的状态
|
||||
# 取外过无风
|
||||
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)
|
||||
# 取400m代表档距下
|
||||
sigma_m = 28517 / area # 架线时,初伸长未释放前的最低点水平应力。单位N/mm2
|
||||
span_count = 3 # 几个档距
|
||||
# n个档距,n-1个直线塔
|
||||
h_array = [0, 0, 0]
|
||||
l_array = [300, 400, 500]
|
||||
t_array = [15, 15, 15]
|
||||
lambda_array = [lambda_m, lambda_m, lambda_m]
|
||||
loop_count = 1
|
||||
sigma_0 = sigma_m * 0.8
|
||||
while True:
|
||||
sigma_0 = sigma_0 + 0.001
|
||||
sigma = [sigma_0, 0, 0]
|
||||
b_i = 0
|
||||
for i in range(span_count - 1):
|
||||
h_i = h_array[i]
|
||||
l_i = l_array[i]
|
||||
lambda_i = lambda_array[i]
|
||||
t_i = t_array[i]
|
||||
sigma_i = sigma[i]
|
||||
_delta_l_i = delta_li(
|
||||
h_i,
|
||||
l_i,
|
||||
lambda_i,
|
||||
alpha,
|
||||
elastic,
|
||||
t_e,
|
||||
t_i,
|
||||
sigma_i,
|
||||
lambda_m,
|
||||
t_m,
|
||||
sigma_m,
|
||||
)
|
||||
b_i += _delta_l_i
|
||||
length_i = string_length
|
||||
g_i = string_g
|
||||
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,
|
||||
)
|
||||
sigma[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:
|
||||
print("找到解。")
|
||||
print("悬垂串偏移累加bi为{b_i}".format(b_i=b_i))
|
||||
break
|
||||
if loop_count >= loop_end:
|
||||
print("!!!未找到解。")
|
||||
print(sigma)
|
||||
print(b_i)
|
||||
break
|
||||
|
||||
|
||||
cal_loop()
|
||||
print("Finished.")
|
||||
|
|
|
|||
Loading…
Reference in New Issue