作为一名土木工程师,我正在制定一个程序,以查找屈服于弯矩的钢筋混凝土截面的平衡状态。
钢筋混凝土截面平衡:
基本上,我有2个未知数,分别是 eps_sup 和 eps_inf
我的常数是 M
我有一些变量仅取决于( eps_sup , eps_inf )的值。这些函数是非线性的,无需赘述。
当我有两个正确的值时,将验证以下方程式:
Fc + Fs = 0(强制平衡)
M / z = Fc = -Fs(力矩平衡)
今天,我的算法包括查找以下值的最小值: abs(Fc + Fs)/ Fc + abs(M_calc-M)/ M
为此,我要在给定限制和给定步骤之间在 e eps_sup 和 eps_inf 上进行迭代,并且该步骤必须足够小才能找到解决方案。
它正在工作,但是它非常(非常)缓慢,因为它要遍历很宽的值范围而没有尝试减少迭代次数。
我当然可以找到一个优化的解决方案,那就是我需要您的帮助。
'Constants :
M
'Variables :
delta = 10000000000000
eps_sup = 0
eps_inf = 0
M_calc = 0
Fc = 0
Fs = 0
z = 0
eps_sup_candidate = 0
eps_inf_candidate = 0
For eps_sup = 0 to 0,005 step = 0,000001
For eps_inf = -0,05 to 0 step = 0,000001
Fc = f(eps_sup,eps_inf)
Fs = g(eps_sup,eps_inf)
z = h(eps_sup,eps_inf)
M_calc = Fc * z
If (abs(Fc+Fs)/Fc + abs(M_calc-M)/M) < delta Then
delta = abs(Fc+Fs)/Fc + abs(M_calc-M)/M
eps_sup_candidate = eps_sup
eps_inf_candidate = eps_inf
End If
Next
Next