准备修改成通用程序。
This commit is contained in:
parent
dbbba95996
commit
ba4668e97b
|
|
@ -1 +1,2 @@
|
||||||
venv
|
venv
|
||||||
|
*.xls
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
# 利用自动微分计算
|
# 利用自动微分计算
|
||||||
|
import datetime
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
import sympy
|
import sympy
|
||||||
|
|
@ -91,21 +92,21 @@ def evaluate_d_delta_l_i_sigma_i(val_delta_l_li, val_sigma_i):
|
||||||
math.atan(h_array[i] / l_array[i]),
|
math.atan(h_array[i] / l_array[i]),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
manual_val = exp.manual_diff_delta_li_sigma_i(
|
# manual_val = exp.manual_diff_delta_li_sigma_i(
|
||||||
h_array[i],
|
# h_array[i],
|
||||||
l_array[i],
|
# l_array[i],
|
||||||
lambda_m_data,
|
# lambda_m_data,
|
||||||
lambda_i_array[i],
|
# lambda_i_array[i],
|
||||||
val_sigma_i[i],
|
# val_sigma_i[i],
|
||||||
sigma_m_data,
|
# sigma_m_data,
|
||||||
alpha_data,
|
# alpha_data,
|
||||||
t_data,
|
# t_data,
|
||||||
t_e_data,
|
# t_e_data,
|
||||||
t_m_data,
|
# t_m_data,
|
||||||
elastic_data,
|
# elastic_data,
|
||||||
)
|
# )
|
||||||
if math.fabs(val - manual_val) > 1e-5:
|
# if math.fabs(val - manual_val) > 1e-5:
|
||||||
raise Exception("d_delta_l_i_sigma_i 自动和手动微分不匹配")
|
# raise Exception("d_delta_l_i_sigma_i 自动和手动微分不匹配")
|
||||||
val_list.append(val)
|
val_list.append(val)
|
||||||
return val_list
|
return val_list
|
||||||
|
|
||||||
|
|
@ -146,21 +147,21 @@ def evaluate_d_sigma_i1_d_delta_l_i(val_delta_l_li, val_sigma_i):
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
manual_val = exp.manual_diff_sigma_i1_d_l_i(
|
# manual_val = exp.manual_diff_sigma_i1_d_l_i(
|
||||||
h_array[i],
|
# h_array[i],
|
||||||
l_array[i],
|
# l_array[i],
|
||||||
h_array[i + 1],
|
# h_array[i + 1],
|
||||||
l_array[i + 1],
|
# l_array[i + 1],
|
||||||
string_g / conductor_n,
|
# string_g / conductor_n,
|
||||||
area_data,
|
# area_data,
|
||||||
lambda_i_array[i],
|
# lambda_i_array[i],
|
||||||
lambda_i_array[i + 1],
|
# lambda_i_array[i + 1],
|
||||||
val_sigma_i[i],
|
# val_sigma_i[i],
|
||||||
string_length,
|
# string_length,
|
||||||
math.fsum(val_delta_l_li[0 : i + 1]),
|
# math.fsum(val_delta_l_li[0 : i + 1]),
|
||||||
)
|
# )
|
||||||
if math.fabs(manual_val - _val) > 1e-5:
|
# if math.fabs(manual_val - _val) > 1e-5:
|
||||||
raise Exception("d_sigma_i1_delta_L_i 自动和手动微分不匹配")
|
# raise Exception("d_sigma_i1_delta_L_i 自动和手动微分不匹配")
|
||||||
col.append(_val)
|
col.append(_val)
|
||||||
row.append(col)
|
row.append(col)
|
||||||
return sympy.Matrix(row)
|
return sympy.Matrix(row)
|
||||||
|
|
@ -196,13 +197,14 @@ def evaluate_d_sigma_i1_d_delta_sigma_i(val_delta_li):
|
||||||
|
|
||||||
|
|
||||||
def solve():
|
def solve():
|
||||||
|
starttime = datetime.datetime.now()
|
||||||
# 初始化
|
# 初始化
|
||||||
val_delta_li = [0.1 for _ in range(span_count)]
|
val_delta_li = [data.string_length / (span_count + 1) for _ in range(span_count)]
|
||||||
val_sigma_i = [sigma_m_data for _ in range(span_count)]
|
val_sigma_i = [sigma_m_data for _ in range(span_count)]
|
||||||
loop = 0
|
loop = 0
|
||||||
while True:
|
while True:
|
||||||
loop += 1
|
loop += 1
|
||||||
print("第{loop}次迭代".format(loop=loop))
|
# print("第{loop}次迭代".format(loop=loop))
|
||||||
if loop >= 20:
|
if loop >= 20:
|
||||||
break
|
break
|
||||||
# A为dΔli/dli
|
# A为dΔli/dli
|
||||||
|
|
@ -274,7 +276,7 @@ def solve():
|
||||||
abs_min.sort()
|
abs_min.sort()
|
||||||
if abs_min[-1] < 1e-5:
|
if abs_min[-1] < 1e-5:
|
||||||
break
|
break
|
||||||
print("最大偏差{max_dx}".format(max_dx=abs_min[-1]))
|
# print("最大偏差{max_dx}".format(max_dx=abs_min[-1]))
|
||||||
# 更新变量
|
# 更新变量
|
||||||
for i in range(span_count):
|
for i in range(span_count):
|
||||||
val_delta_li[i] += x_list[i]
|
val_delta_li[i] += x_list[i]
|
||||||
|
|
@ -286,6 +288,9 @@ def solve():
|
||||||
# print(val_delta_li)
|
# print(val_delta_li)
|
||||||
# print(val_sigma_i)
|
# print(val_sigma_i)
|
||||||
verify(val_delta_li, val_sigma_i)
|
verify(val_delta_li, val_sigma_i)
|
||||||
|
endtime = datetime.datetime.now()
|
||||||
|
# print('执行时间{t}'.format(t=(endtime-starttime).microseconds/1000))
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def verify(val_delta_li, val_sigma_i):
|
def verify(val_delta_li, val_sigma_i):
|
||||||
|
|
|
||||||
145
data.py
145
data.py
|
|
@ -1,35 +1,98 @@
|
||||||
# loop_end = 10000000 # 最大循环次数
|
# # loop_end = 10000000 # 最大循环次数
|
||||||
loop_end = 1000000 # 最大循环次数
|
# loop_end = 1000000 # 最大循环次数
|
||||||
|
# # 架线时的状态
|
||||||
|
# # 取外过无风
|
||||||
|
# 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)
|
||||||
|
# lambda_i_array = [
|
||||||
|
# lambda_m * 0.9,
|
||||||
|
# lambda_m * 1.2,
|
||||||
|
# lambda_m,
|
||||||
|
# lambda_m,
|
||||||
|
# lambda_m,
|
||||||
|
# lambda_m * 0.9,
|
||||||
|
# lambda_m * 1.5,
|
||||||
|
# lambda_m,
|
||||||
|
# lambda_m,
|
||||||
|
# lambda_m,
|
||||||
|
# lambda_m,
|
||||||
|
# lambda_m,
|
||||||
|
# lambda_m,
|
||||||
|
# lambda_m * 0.9,
|
||||||
|
# lambda_m * 1.3,
|
||||||
|
# ]
|
||||||
|
# # 取400m代表档距下
|
||||||
|
# sigma_m = 28517 / area # 架线时,初伸长未释放前的最低点水平应力。单位N/mm2
|
||||||
|
# span_count = 14 # 几个档距
|
||||||
|
# # n个档距,n-1个直线塔
|
||||||
|
# h_array = [
|
||||||
|
# 0,
|
||||||
|
# 0,
|
||||||
|
# 0,
|
||||||
|
# 0,
|
||||||
|
# 0,
|
||||||
|
# 0,
|
||||||
|
# 0,
|
||||||
|
# 0,
|
||||||
|
# 0,
|
||||||
|
# 0,
|
||||||
|
# 0,
|
||||||
|
# 0,
|
||||||
|
# 0,
|
||||||
|
# 0,
|
||||||
|
# 0,
|
||||||
|
# ]
|
||||||
|
# l_array = [
|
||||||
|
# 400,
|
||||||
|
# 300,
|
||||||
|
# 300,
|
||||||
|
# 500,
|
||||||
|
# 300,
|
||||||
|
# 400,
|
||||||
|
# 300,
|
||||||
|
# 300,
|
||||||
|
# 500,
|
||||||
|
# 300,
|
||||||
|
# 300,
|
||||||
|
# 500,
|
||||||
|
# 300,
|
||||||
|
# 400,
|
||||||
|
# 300,
|
||||||
|
# ]
|
||||||
|
# t = 15
|
||||||
|
# epsilon = 1e-4 # 收敛判据
|
||||||
|
# conductor_n = 6 # 导线分裂数
|
||||||
|
|
||||||
|
|
||||||
|
loop_end = 5000000 # 最大循环次数
|
||||||
# 架线时的状态
|
# 架线时的状态
|
||||||
# 取外过无风
|
# 取外过无风
|
||||||
string_length = 9.2 # 串长 单位m
|
string_length = 0.5 # 串长 单位m
|
||||||
string_g = 60 * 9.8 # 串重 单位N
|
string_g = 30 * 9.8 # 串重 单位N
|
||||||
t_m = 15 # 导线架设时的气温。单位°C
|
t_m = -25 # 导线架设时的气温。单位°C
|
||||||
t_e = 20 # 架线时考虑初伸长的降温,取正值。单位°C
|
t_e = 0 # 架线时考虑初伸长的降温,取正值。单位°C
|
||||||
alpha = 0.0000155 # 导线膨胀系数 1/°C
|
alpha = 0.0000155 # 导线膨胀系数 1/°C
|
||||||
elastic = 95900 # 弹性系数 N/mm2
|
elastic = 95900 # 弹性系数 N/mm2
|
||||||
area = 154.48 # 导线面积 mm2
|
area = 154.48 # 导线面积 mm2
|
||||||
lambda_m = 14.8129 / area # 导线比载 N/(m.mm)
|
lambda_m = 7.3256 / area # 导线比载 N/(m.mm)
|
||||||
lambda_i_array = [
|
lambda_i_array = [
|
||||||
lambda_m * 0.9,
|
14.7012 / area,
|
||||||
lambda_m * 1.2,
|
14.7012 / area,
|
||||||
lambda_m,
|
14.7012 / area,
|
||||||
lambda_m,
|
8.8007 / area,
|
||||||
lambda_m,
|
14.7012 / area,
|
||||||
lambda_m * 0.9,
|
14.7012 / area,
|
||||||
lambda_m * 1.5,
|
14.7012 / area,
|
||||||
lambda_m,
|
|
||||||
lambda_m,
|
|
||||||
lambda_m,
|
|
||||||
lambda_m,
|
|
||||||
lambda_m,
|
|
||||||
lambda_m,
|
|
||||||
lambda_m * 0.9,
|
|
||||||
lambda_m * 1.3,
|
|
||||||
]
|
]
|
||||||
# 取400m代表档距下
|
# 取400m代表档距下
|
||||||
sigma_m = 28517 / area # 架线时,初伸长未释放前的最低点水平应力。单位N/mm2
|
sigma_m = 17449 / area # 架线时,初伸长未释放前的最低点水平应力。单位N/mm2
|
||||||
span_count = 14 # 几个档距
|
span_count = 7 # 几个档距
|
||||||
# n个档距,n-1个直线塔
|
# n个档距,n-1个直线塔
|
||||||
h_array = [
|
h_array = [
|
||||||
0,
|
0,
|
||||||
|
|
@ -39,32 +102,16 @@ h_array = [
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
]
|
]
|
||||||
l_array = [
|
l_array = [
|
||||||
400,
|
703,
|
||||||
300,
|
720,
|
||||||
300,
|
587,
|
||||||
500,
|
620,
|
||||||
300,
|
539,
|
||||||
400,
|
450,
|
||||||
300,
|
611,
|
||||||
300,
|
|
||||||
500,
|
|
||||||
300,
|
|
||||||
300,
|
|
||||||
500,
|
|
||||||
300,
|
|
||||||
400,
|
|
||||||
300,
|
|
||||||
]
|
]
|
||||||
t = 15
|
t = 40
|
||||||
epsilon = 1e-4 # 收敛判据
|
epsilon = 1e-4 # 收敛判据
|
||||||
conductor_n = 6 # 导线分裂数
|
conductor_n = 1 # 导线分裂数
|
||||||
|
|
|
||||||
14
exp.py
14
exp.py
|
|
@ -149,7 +149,7 @@ def manual_diff_sigma_i1_d_l_i(
|
||||||
+ sigma_i * h_i / l_i
|
+ sigma_i * h_i / l_i
|
||||||
+ sigma_i / b_i * ((stringlen ** 2 - b_i ** 2) ** 0.5)
|
+ 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
|
B = ((stringlen ** 2 - b_i ** 2) ** 0.5) / b_i + h_i1 / l_i1
|
||||||
dA_d_delta_L1 = (
|
dA_d_delta_L1 = (
|
||||||
sigma_i
|
sigma_i
|
||||||
* (
|
* (
|
||||||
|
|
@ -169,6 +169,7 @@ def manual_diff_sigma_i1_d_l_i(
|
||||||
_t = -(dA_d_delta_L1 * B - A * dB_d_delta_L1) / (B ** 2)
|
_t = -(dA_d_delta_L1 * B - A * dB_d_delta_L1) / (B ** 2)
|
||||||
return _t
|
return _t
|
||||||
|
|
||||||
|
|
||||||
def get_lambdify_d_delta_l_i_sigma_i(_d_delta_l_i_sigma_i):
|
def get_lambdify_d_delta_l_i_sigma_i(_d_delta_l_i_sigma_i):
|
||||||
(
|
(
|
||||||
delta_l_i,
|
delta_l_i,
|
||||||
|
|
@ -200,7 +201,7 @@ def get_lambdify_d_delta_l_i_sigma_i(_d_delta_l_i_sigma_i):
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
return sympy.lambdify(
|
return sympy.lambdify(
|
||||||
(
|
[
|
||||||
delta_l_i,
|
delta_l_i,
|
||||||
l_i,
|
l_i,
|
||||||
lambda_i,
|
lambda_i,
|
||||||
|
|
@ -213,11 +214,12 @@ def get_lambdify_d_delta_l_i_sigma_i(_d_delta_l_i_sigma_i):
|
||||||
sigma_m,
|
sigma_m,
|
||||||
_sigma_i,
|
_sigma_i,
|
||||||
beta_i,
|
beta_i,
|
||||||
),
|
],
|
||||||
_d_delta_l_i_sigma_i,
|
_d_delta_l_i_sigma_i,
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_lambdify_d_sigma_i1_d_l_i(_d_sigma_i1_d_l_i,delta_Li):
|
|
||||||
|
def get_lambdify_d_sigma_i1_d_l_i(_d_sigma_i1_d_l_i, delta_Li):
|
||||||
(
|
(
|
||||||
G_i,
|
G_i,
|
||||||
A,
|
A,
|
||||||
|
|
@ -251,7 +253,7 @@ def get_lambdify_d_sigma_i1_d_l_i(_d_sigma_i1_d_l_i,delta_Li):
|
||||||
)
|
)
|
||||||
|
|
||||||
return sympy.lambdify(
|
return sympy.lambdify(
|
||||||
(
|
[
|
||||||
G_i,
|
G_i,
|
||||||
A,
|
A,
|
||||||
lambda_i,
|
lambda_i,
|
||||||
|
|
@ -266,6 +268,6 @@ def get_lambdify_d_sigma_i1_d_l_i(_d_sigma_i1_d_l_i,delta_Li):
|
||||||
beta_i,
|
beta_i,
|
||||||
beta_i1,
|
beta_i1,
|
||||||
*delta_Li,
|
*delta_Li,
|
||||||
),
|
],
|
||||||
_d_sigma_i1_d_l_i,
|
_d_sigma_i1_d_l_i,
|
||||||
)
|
)
|
||||||
55
main.py
55
main.py
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
import math
|
import math
|
||||||
import data
|
import data
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
# h_i 悬点高差
|
# h_i 悬点高差
|
||||||
# l_i 悬点档距
|
# l_i 悬点档距
|
||||||
|
|
@ -107,7 +108,7 @@ def cal_loop():
|
||||||
b_i = 0
|
b_i = 0
|
||||||
# 一次增加0.1N
|
# 一次增加0.1N
|
||||||
sigma_0 = sigma_0 + 0.01 / data.area
|
sigma_0 = sigma_0 + 0.01 / data.area
|
||||||
sigma_array = [sigma_0 for j in range(span_count)]
|
sigma_array = [sigma_0 for _ in range(span_count)]
|
||||||
delta_l_i_array = []
|
delta_l_i_array = []
|
||||||
for i in range(span_count):
|
for i in range(span_count):
|
||||||
h_i = h_array[i]
|
h_i = h_array[i]
|
||||||
|
|
@ -199,19 +200,19 @@ def verify(
|
||||||
sigma_array: [float],
|
sigma_array: [float],
|
||||||
delta_l_i_array: [float],
|
delta_l_i_array: [float],
|
||||||
lambda_array: [float],
|
lambda_array: [float],
|
||||||
t_i,
|
t_i: float,
|
||||||
alpha,
|
alpha: float,
|
||||||
elastic,
|
elastic: float,
|
||||||
t_e,
|
t_e: float,
|
||||||
lambda_m,
|
lambda_m: float,
|
||||||
t_m,
|
t_m: float,
|
||||||
sigma_m,
|
sigma_m: float,
|
||||||
epsilon=1e-4,
|
epsilon: float = 1e-4,
|
||||||
):
|
):
|
||||||
# 用新版大手册p329页(5-61)第一个公式校验
|
# 用新版大手册p329页(5-61)第一个公式校验
|
||||||
b_i = 0
|
b_i = 0
|
||||||
if math.fabs((math.fsum(delta_l_i_array)))>1e-5:
|
if math.fabs((math.fsum(delta_l_i_array))) > 1e-5:
|
||||||
print('偏移累加不等于0')
|
print("偏移累加不等于0")
|
||||||
return
|
return
|
||||||
for i in range(len(delta_l_i_array)):
|
for i in range(len(delta_l_i_array)):
|
||||||
sigma_i = sigma_array[i]
|
sigma_i = sigma_array[i]
|
||||||
|
|
@ -260,30 +261,18 @@ def verify(
|
||||||
print("!!!应力等式不满足")
|
print("!!!应力等式不满足")
|
||||||
return
|
return
|
||||||
print("等式满足。")
|
print("等式满足。")
|
||||||
# print('sigma')
|
print("sigma")
|
||||||
# print(sigma_array)
|
print(np.array(sigma_array) * area)
|
||||||
print('delta_li')
|
print("delta_li")
|
||||||
print(delta_l_i_array)
|
print(delta_l_i_array)
|
||||||
|
print("串偏移")
|
||||||
|
b_i = 0
|
||||||
|
b_i_list = []
|
||||||
|
for l_i in delta_l_i_array[:-1]:
|
||||||
|
b_i += l_i
|
||||||
|
b_i_list.append(b_i)
|
||||||
|
print(b_i_list)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
cal_loop()
|
cal_loop()
|
||||||
import sympy
|
|
||||||
|
|
||||||
# sympy.init_printing(use_unicode=False)
|
|
||||||
# a, b, c, d = sympy.symbols("a b c d")
|
|
||||||
# m, w, n, t = sympy.symbols("m w n t")
|
|
||||||
# b1, b2, b3 = sympy.symbols("b1 b2 b3")
|
|
||||||
# x = sympy.symbols("x")
|
|
||||||
# fx = (a * sympy.exp(-x / b1) + b * sympy.exp(-t / b1) + c) * sympy.cos(
|
|
||||||
# w * x + d
|
|
||||||
# ) + m * sympy.exp(-t / b3) * sympy.sin(w * x + n)
|
|
||||||
# int_f = sympy.integrate(fx, x)
|
|
||||||
# sympy.pprint(int_f, use_unicode=True)
|
|
||||||
# sympy.print_mathml(int_f)
|
|
||||||
# import sympy.matrices
|
|
||||||
# u_list=sympy.symbols("u1:101")
|
|
||||||
# sympy.pprint(u_list)
|
|
||||||
# m=sympy.Matrix(u_list)
|
|
||||||
# sympy.pprint(m)
|
|
||||||
# print("Finished.")
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue