1.重新整理代码

2.收敛条件强制让不等式满足要求
This commit is contained in:
facat 2020-12-14 16:34:23 +08:00
parent c8c245e717
commit dbbba95996
4 changed files with 132 additions and 152 deletions

View File

@ -22,15 +22,6 @@ sympy.init_printing()
# _t_m 导线架线时时导线温度 单位°C
delta_Li__1 = sympy.symbols(
"delta_Li:{span_count}".format(span_count=data.span_count - 1)
)
delta_Li = (
*delta_Li__1,
sympy.symbols("delta_Li_i"),
)
loop_end = data.loop_end # 最大循环次数
# 架线时的状态
# 取外过无风
@ -46,129 +37,28 @@ sigma_m_data = data.sigma_m # 架线时,初伸长未释放前的最低点水
span_count = data.span_count # 几个档距
# n个档距,n-1个直线塔
h_array = data.h_array
# sympy.pprint(hi_matrix)
l_array = data.l_array
t_data = data.t
conductor_n = data.conductor_n
# ti_matrix = sympy.Matrix(t_array)
lambda_i_array = data.lambda_i_array
# TODO: 暂时没考虑荷载变化
symbol_delta_l_i = exp.delta_li()
sigma_i = sympy.symbols("sigma_i")
d_delta_l_i_sigma_i = sympy.diff(symbol_delta_l_i, sigma_i)
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,
)
fx_d_delta_l_i_sigma_i = get_lambdify_d_delta_l_i_sigma_i(d_delta_l_i_sigma_i)
fx_d_delta_l_i_sigma_i = exp.get_lambdify_d_delta_l_i_sigma_i(d_delta_l_i_sigma_i)
delta_Li__1 = sympy.symbols(
"delta_Li:{span_count}".format(span_count=data.span_count - 1)
)
delta_Li = (
*delta_Li__1,
sympy.symbols("delta_Li_i"),
)
symbol_sigma_i1 = exp.fun_sigma_i1(delta_Li)
delta_Li_i = sympy.symbols("delta_Li_i")
d_sigma_i1_d_l_i = sympy.diff(symbol_sigma_i1, delta_Li_i)
def get_lambdify_d_sigma_i1_d_l_i(_d_sigma_i1_d_l_i):
(
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,
)
fx_d_sigma_i1_d_l_i = get_lambdify_d_sigma_i1_d_l_i(d_sigma_i1_d_l_i)
fx_d_sigma_i1_d_l_i = exp.get_lambdify_d_sigma_i1_d_l_i(d_sigma_i1_d_l_i, delta_Li)
# 一共2n个变量n个delta_Lin个sigma_i
@ -308,11 +198,7 @@ def evaluate_d_sigma_i1_d_delta_sigma_i(val_delta_li):
def solve():
# 初始化
val_delta_li = [0.1 for _ in range(span_count)]
# val_delta_li = [0.15931589580330385, -0.19294219226439696, 0.035236744603670586, -0.03124795962518869, 0.034422847061933395, 0.1639551737321582, -0.18876605469917845, 0.03862307099222713, -0.01858088432390902]
# val_sigma_i = [175.44277576372207, 176.07105062365383, 175.94897602628689, 175.95574563415994, 175.83116207025824, 175.84778616876434, 176.5132398968081, 176.4405408454816, 176.51871673188586]
val_sigma_i = [sigma_m_data for _ in range(span_count)]
loop = 0
while True:
loop += 1
@ -377,19 +263,14 @@ def solve():
b_list.extend(fx_delta_Li)
b_list.extend(fx_sigma_i1)
b_list.extend(fx_sum_Li)
# b = sympy.Matrix(b_list)
# x = sympy.linsolve((-A, b))
# x_list = [float(_x) for _x in list(x)[0]]
# numpy
# print(A.tolist())
AA = np.array(A.tolist(), np.float64)
# AA=np.array([[1, 0, 0, -0.0104519104486432, 0, 0], [0, 1, 0, 0, -0.00782784930594165, 0], [0, 0, 1, 0, 0, -0.00640057303461462], [-3.78731866382623, 0, 0, -1.00000000000000, 1, 0], [-3.47643075688507, -3.47643075688507, 0, 0, -1.00000000000000, 1], [1, 1, 1, 0, 0, 0]])
# print(b.transpose().tolist()[0])
AA = np.array(A.tolist(), dtype=np.float64)
b = np.array(b_list, dtype=np.float64)
# BB=[-0.159573673689794, 0.140383878899664, 0.00728144380483030, -0.378687120179166, -0.694957566239367, 0.300000000000000]
x = np.linalg.solve(-AA, b)
x_list = x
abs_min: List[float] = [math.fabs(_x) for _x in x_list]
# 强制要求等式满足
abs_min: List[float] = [
math.fabs(_x) for _x in [*x_list, *fx_delta_Li, *fx_sigma_i1]
]
abs_min.sort()
if abs_min[-1] < 1e-5:
break

View File

@ -17,7 +17,7 @@ lambda_i_array = [
lambda_m,
lambda_m,
lambda_m * 0.9,
lambda_m * 1.1,
lambda_m * 1.5,
lambda_m,
lambda_m,
lambda_m,
@ -29,7 +29,7 @@ lambda_i_array = [
]
# 取400m代表档距下
sigma_m = 28517 / area # 架线时初伸长未释放前的最低点水平应力。单位N/mm2
span_count = 10 # 几个档距
span_count = 14 # 几个档距
# n个档距,n-1个直线塔
h_array = [
0,

103
exp.py
View File

@ -43,7 +43,6 @@ def delta_li():
sigma_i,
beta_i,"""
)
# beta_i = sympy.atan(h_i / l_i) # 高差角
_delta_li = delta_l_i - (
l_i
/ ((sympy.cos(beta_i) ** 2) * (1 + (lambda_i * l_i / sigma_i) ** 2 / 8))
@ -55,7 +54,6 @@ def delta_li():
+ alpha * (t_i + t_e - t_m)
)
)
# d_delta_li_sigma_i = sympy.diff(_delta_li, sigma_i)
return _delta_li
@ -170,3 +168,104 @@ 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,
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,
)

30
main.py
View File

@ -69,18 +69,15 @@ def fun_sigma_i1(
) -> float:
beta_i = math.atan(h_i / l_i)
beta_i1 = math.atan(h_i1 / l_i1)
try:
_sigma_i1 = (
(
g_i / 2 / area # g_i传入时已考虑导线分裂数
+ 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)
except:
a=12
_sigma_i1 = (
(
g_i / 2 / area # g_i传入时已考虑导线分裂数
+ 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
@ -109,7 +106,7 @@ def cal_loop():
while True:
b_i = 0
# 一次增加0.1N
sigma_0 = sigma_0 + 0.1 / data.area
sigma_0 = sigma_0 + 0.01 / data.area
sigma_array = [sigma_0 for j in range(span_count)]
delta_l_i_array = []
for i in range(span_count):
@ -213,6 +210,9 @@ def verify(
):
# 用新版大手册p329页(5-61)第一个公式校验
b_i = 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]
_delta_l_i = delta_l_i_array[i]
@ -262,8 +262,8 @@ def verify(
print("等式满足。")
# print('sigma')
# print(sigma_array)
# print('delta_li')
# print(delta_l_i_array)
print('delta_li')
print(delta_l_i_array)
if __name__ == "__main__":