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

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

10
main.py
View File

@ -160,7 +160,9 @@ def cal_loop():
for i in range(span_count): for i in range(span_count):
print("{i}档导线应力为{tension}".format(i=i, tension=sigma_array[i])) print("{i}档导线应力为{tension}".format(i=i, tension=sigma_array[i]))
for i in range(span_count - 1): 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( verify(
area, area,
h_array, h_array,
@ -204,6 +206,7 @@ def verify(
lambda_m, lambda_m,
t_m, t_m,
sigma_m, sigma_m,
epsilon=1e-4,
): ):
# 用新版大手册p329页(5-61)第一个公式校验 # 用新版大手册p329页(5-61)第一个公式校验
b_i = 0 b_i = 0
@ -249,13 +252,14 @@ def verify(
string_g / 2 / area + w_i # string_g已在传入时考虑了导线分裂数 string_g / 2 / area + w_i # string_g已在传入时考虑了导线分裂数
) )
# TODO 等式允许误差是否可调? # 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(math.fabs(right_equ - left_equ))
print("!!!应力等式不满足") print("!!!应力等式不满足")
return return
print("等式满足。") print("等式满足。")
if __name__=='__main__':
if __name__ == "__main__":
cal_loop() cal_loop()
import sympy import sympy