在自动微分中引用等式检查。

This commit is contained in:
facat 2020-12-13 17:07:53 +08:00
parent 2984fac87b
commit b4db8b612e
2 changed files with 39 additions and 12 deletions

View File

@ -37,8 +37,8 @@ string_g = data.string_g # 串重 单位N
t_m_data = data.t_m # 导线架设时的气温。单位°C
t_e_data = data.t_e # 架线时考虑初伸长的降温取正值。单位°C
alpha_data = data.alpha # 导线膨胀系数 1/°C
elastic = data.elastic # 弹性系数 N/mm2
area = data.area # 导线面积 mm2
elastic_data = data.elastic # 弹性系数 N/mm2
area_data = data.area # 导线面积 mm2
lambda_m_data = data.lambda_m # 导线比载 N/(m.mm)
sigma_m_data = data.sigma_m # 架线时初伸长未释放前的最低点水平应力。单位N/mm2
span_count = data.span_count # 几个档距
@ -116,7 +116,7 @@ def evaluate_d_delta_l_i_sigma_i(val_delta_l_li, val_sigma_i):
(l_i, l_array[i]),
(lambda_i, lambda_i_array[i]),
(alpha, alpha_data),
(E, elastic),
(E, elastic_data),
(t_e, t_e_data),
(t_i, t_data),
(lambda_m, lambda_m_data),
@ -174,7 +174,7 @@ def evaluate_d_sigma_i1_d_delta_l_i(val_delta_l_li, val_sigma_i):
_val = d_sigma_i1_d_l_i.subs(
[
(G_i, string_g / conductor_n),
(A, area),
(A, area_data),
(lambda_i, lambda_i_array[i]),
(lambda_i1, lambda_i_array[i + 1]),
(_sigma_i, val_sigma_i[i]),
@ -277,7 +277,7 @@ def solve():
l_array[i],
lambda_i_array[i],
alpha_data,
elastic,
elastic_data,
t_e_data,
t_data,
val_sigma_i[i],
@ -290,7 +290,7 @@ def solve():
fx_sigma_i1.append(
val_sigma_i[i + 1]
- main.fun_sigma_i1(
area,
area_data,
val_sigma_i[i],
math.fsum(val_delta_li[0 : i + 1]),
string_length,
@ -346,7 +346,30 @@ def solve():
print(loop)
print(val_delta_li)
print(val_sigma_i)
verify(val_delta_li,val_sigma_i)
def verify(val_delta_li, val_sigma_i):
main.verify(
area_data,
h_array,
l_array,
string_length,
string_g / conductor_n,
val_sigma_i,
val_delta_li,
lambda_i_array,
t_data,
alpha_data,
elastic_data,
t_e_data,
lambda_m_data,
t_m_data,
sigma_m_data,
1e-5,
)
solve()
print("Finished.")

16
main.py
View File

@ -134,7 +134,7 @@ def cal_loop():
g_i = string_g / data.conductor_n
h_i1 = h_array[i + 1]
l_i1 = l_array[i + 1]
if i<span_count-1:
if i < span_count - 1:
lambda_i1 = lambda_i_array[i + 1]
try:
sigma_i1 = fun_sigma_i1(
@ -160,7 +160,9 @@ def cal_loop():
for i in range(span_count):
print("{i}档导线应力为{tension}".format(i=i, tension=sigma_array[i]))
for i in range(span_count - 1):
print("{i}串偏移值为{bias}".format(i=i, bias=math.fsum(delta_l_i_array[0:i])))
print(
"{i}串偏移值为{bias}".format(i=i, bias=math.fsum(delta_l_i_array[0:i]))
)
verify(
area,
h_array,
@ -204,6 +206,7 @@ def verify(
lambda_m,
t_m,
sigma_m,
epsilon=1e-4,
):
# 用新版大手册p329页(5-61)第一个公式校验
b_i = 0
@ -230,7 +233,7 @@ def verify(
)
if math.fabs(cal_delta_l_i - _delta_l_i) > 1e-4:
print("!!!偏移等式不满足。")
if i<len(delta_l_i_array)-1:
if i < len(delta_l_i_array) - 1:
sigma_i1 = sigma_array[i + 1]
left_equ = sigma_array[i + 1]
lambda_i1 = lambda_array[i + 1]
@ -244,18 +247,19 @@ def verify(
+ (lambda_i1 * l_i1 / 2 / math.cos(beta_i1) - sigma_i1 * h_i1 / l_i1)
)
b_i += delta_l_i_array[i]
#新版大手册p329 (5-61) 最上方公式
# 新版大手册p329 (5-61) 最上方公式
right_equ = sigma_i + b_i / math.sqrt(string_length ** 2 - b_i ** 2) * (
string_g / 2 / area + w_i # string_g已在传入时考虑了导线分裂数
)
# TODO 等式允许误差是否可调?
if math.fabs(right_equ - left_equ) > 1e-4:
if math.fabs(right_equ - left_equ) > epsilon:
print(math.fabs(right_equ - left_equ))
print("!!!应力等式不满足")
return
print("等式满足。")
if __name__=='__main__':
if __name__ == "__main__":
cal_loop()
import sympy