修复凑数法,之前计算方法不对。

This commit is contained in:
facat 2020-12-11 21:38:18 +08:00
parent d83d6a8224
commit ca9c2edacf
1 changed files with 73 additions and 52 deletions

57
main.py
View File

@ -19,13 +19,13 @@ import data
def delta_li( def delta_li(
h_i: float, h_i: float,
l_i: float, l_i,
lambda_i: float, lambda_i: float,
_alpha: float, _alpha: float,
_elastic: float, _elastic: float,
_t_e: float, _t_e: float,
t_i: float, t_i: float,
sigma_i: float, sigma_i,
_lambda_m: float, _lambda_m: float,
_t_m: float, _t_m: float,
_sigma_m: float, _sigma_m: float,
@ -71,7 +71,7 @@ def fun_sigma_i1(
beta_i1 = math.atan(h_i1 / l_i1) beta_i1 = math.atan(h_i1 / l_i1)
_sigma_i1 = ( _sigma_i1 = (
( (
g_i / 2 / area #g_i传入时已考虑导线分裂数 g_i / 2 / area # g_i传入时已考虑导线分裂数
+ lambda_i * l_i / 2 / math.cos(beta_i) + lambda_i * l_i / 2 / math.cos(beta_i)
+ lambda_i1 * l_i1 / 2 / math.cos(beta_i1) + lambda_i1 * l_i1 / 2 / math.cos(beta_i1)
+ sigma_i * h_i / l_i + sigma_i * h_i / l_i
@ -100,19 +100,21 @@ def cal_loop():
h_array = data.h_array h_array = data.h_array
l_array = data.l_array l_array = data.l_array
t_array = data.t_array t_array = data.t_array
lambda_array = [lambda_m for j in range(span_count)] lambda_i_array = data.lambda_i_array
loop_count = 1 loop_count = 1
sigma_0 = sigma_m * 0.5 sigma_0 = sigma_m * 0.2
while True: while True:
if 207052==loop_count:
aaa=1
b_i = 0 b_i = 0
# 一次增加0.1N # 一次增加0.1N
sigma_0 = sigma_0 + 0.01 / data.area sigma_0 = sigma_0 + 0.1 / data.area
sigma_array = [sigma_0 for j in range(span_count)] sigma_array = [sigma_0 for j in range(span_count)]
delta_l_i_array = [] delta_l_i_array = []
for i in range(span_count - 1): for i in range(span_count):
h_i = h_array[i] h_i = h_array[i]
l_i = l_array[i] l_i = l_array[i]
lambda_i = lambda_array[i] lambda_i = lambda_i_array[i]
t_i = t_array[i] t_i = t_array[i]
sigma_i = sigma_array[i] sigma_i = sigma_array[i]
_delta_l_i = delta_li( _delta_l_i = delta_li(
@ -134,7 +136,8 @@ def cal_loop():
g_i = string_g / data.conductor_n g_i = string_g / data.conductor_n
h_i1 = h_array[i + 1] h_i1 = h_array[i + 1]
l_i1 = l_array[i + 1] l_i1 = l_array[i + 1]
lambda_i1 = lambda_array[i + 1] if i<span_count-1:
lambda_i1 = lambda_i_array[i + 1]
try: try:
sigma_i1 = fun_sigma_i1( sigma_i1 = fun_sigma_i1(
area, area,
@ -153,7 +156,6 @@ def cal_loop():
break break
pass pass
sigma_array[i + 1] = sigma_i1 sigma_array[i + 1] = sigma_i1
loop_count += 1
if math.fabs(b_i) < data.epsilon: if math.fabs(b_i) < data.epsilon:
print("迭代{loop_count}次找到解。".format(loop_count=loop_count)) print("迭代{loop_count}次找到解。".format(loop_count=loop_count))
print("悬垂串偏移累加bi为{b_i}".format(b_i=b_i)) print("悬垂串偏移累加bi为{b_i}".format(b_i=b_i))
@ -169,7 +171,7 @@ def cal_loop():
string_g / data.conductor_n, string_g / data.conductor_n,
sigma_array, sigma_array,
delta_l_i_array, delta_l_i_array,
lambda_array, lambda_i_array,
t_array, t_array,
alpha, alpha,
elastic, elastic,
@ -179,6 +181,7 @@ def cal_loop():
sigma_m, sigma_m,
) )
break break
loop_count += 1
if loop_count >= loop_end: if loop_count >= loop_end:
print("!!!未找到解。") print("!!!未找到解。")
print(sigma_array) print(sigma_array)
@ -208,17 +211,12 @@ def verify(
b_i = 0 b_i = 0
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]
sigma_i1 = sigma_array[i + 1]
left_equ = sigma_array[i + 1]
_delta_l_i = delta_l_i_array[i] _delta_l_i = delta_l_i_array[i]
t_i = t_array[i] t_i = t_array[i]
# 此处用新版大手册p329页(5-58)校验偏移值。 # 此处用新版大手册p329页(5-58)校验偏移值。
lambda_i = lambda_array[i] lambda_i = lambda_array[i]
lambda_i1 = lambda_array[i + 1]
h_i = h_array[i] h_i = h_array[i]
h_i1 = h_array[i + 1]
l_i = l_array[i] l_i = l_array[i]
l_i1 = l_array[i + 1]
cal_delta_l_i = delta_li( cal_delta_l_i = delta_li(
h_i, h_i,
l_i, l_i,
@ -234,6 +232,12 @@ def verify(
) )
if math.fabs(cal_delta_l_i - _delta_l_i) > 1e-4: if math.fabs(cal_delta_l_i - _delta_l_i) > 1e-4:
print("!!!偏移等式不满足。") print("!!!偏移等式不满足。")
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]
h_i1 = h_array[i + 1]
l_i1 = l_array[i + 1]
beta_i = math.atan(h_i / l_i) beta_i = math.atan(h_i / l_i)
beta_i1 = math.atan(h_i1 / l_i1) beta_i1 = math.atan(h_i1 / l_i1)
w_i = ( w_i = (
@ -242,6 +246,7 @@ def verify(
+ (lambda_i1 * l_i1 / 2 / math.cos(beta_i1) - sigma_i1 * h_i1 / l_i1) + (lambda_i1 * l_i1 / 2 / math.cos(beta_i1) - sigma_i1 * h_i1 / l_i1)
) )
b_i += delta_l_i_array[i] b_i += delta_l_i_array[i]
#新版大手册p329 (5-61) 最上方公式
right_equ = sigma_i + b_i / math.sqrt(string_length ** 2 - b_i ** 2) * ( right_equ = sigma_i + b_i / math.sqrt(string_length ** 2 - b_i ** 2) * (
string_g / 2 / area + w_i # string_g已在传入时考虑了导线分裂数 string_g / 2 / area + w_i # string_g已在传入时考虑了导线分裂数
) )
@ -254,6 +259,22 @@ def verify(
cal_loop() cal_loop()
import sympy
# sympy.init_printing(use_unicode=False)
print("Finished.") # 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.")