首页 > 解决方案 > 求解 3 个方程、2 个未知数系统的最小化算法

问题描述

作为一名土木工程师,我正在研究一个程序,以找到提交给弯曲力矩的混凝土钢筋截面的平衡。

钢筋混凝土横截面平衡: 钢筋混凝土截面平衡

基本上,我有 2 个未知数,它们是eps_supeps_inf
我有一个常量M
我有一些变量只取决于(eps_supeps_inf)的值。函数是非线性的,无需赘述。

当我有正确的几个值时,将验证以下等式:

Fc + Fs = 0(力平衡)
M/z = Fc = -Fs(力矩平衡)

我的算法,就像今天一样,包括找到最小值:abs(Fc+Fs)/Fc + abs(M_calc-M)/M

为此,我在给定的限制之间迭代e eps_supeps_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

标签: algorithmoptimizationminimization

解决方案


推荐阅读