如何使用SciPy的功能创建“目标寻求”

时间:2018-01-03 12:20:21

标签: python numpy scipy newtons-method

我一直在努力解决这个问题很长一段时间,我希望有人可以帮助我。我有一个名为“ULS”的函数,看起来像这样

def uls(muliple, known, values):
# result = (a value calculated by the known values and the unknown x0)
return result 

该函数包含多个方程,这些方程取决于已知值加上一个未知值x0。所有这些方程的总和应为零(目标),我想知道我的目标可以满足哪个x0值。 (有点像目标寻求)。目前我在循环中拥有所有这些,并且我正在运行许多x0值,直到满足条件。可以在这里使用Scipy方法吗?

方程是线性的。

更多信息。我正在看这个具体问题。对于选定的x_bot值,计算所有列表和变量,并计算表达式abs(equN-N)。现在我想找到x_bot的值,它使abs(equN-N)< 1。

def ULS(xp_bot):

    xp_top = 0.00014                    
    xp_all = []            
    slope = (xp_bot-xp_top)/(Ln)            

    for i in range(0,100,1):
        xp_calc = i*slope + xp_top 
        xp_all.append(xp_calc)
    xp_all.append(xp_bot)

    xmi_all = []          
    for i in range(0,100,1):
        xmi_calc = (xp_all[i] + xp_all[i+1])/2
        xmi_all.append(xmi_calc)

    xi_all = []
    for i in range(0,100,1):
        xi_calc = xmi_all[i] + xni_all[i]
        xi_all.append(xi_calc)
    sic_all = []

    for item in xi_all:
        if item >= 0: 
            sic = item*Ecm
            sic_all.append(sic)    
        else:
            sic = 0
            sic_all.append(sic)

    fic_step = np.multiply(sic_all,a)
    fic = np.divide(fic_step,1000)   
    sis_all = []

    for item in xi_all:
            sis = item*Es
            sis_all.append(sis)           

    fis_step = np.multiply(sis_all,a_s)
    fis = np.divide(fis_step,1000)     

    M_conc = []
    for i in range(0,100):
        multi_c = np.divide(fic,1000)
        M_conc = np.multiply(leverarm,multi_c)

    multi_s = np.divide(fis,1000)
    M_steel = np.multiply(leverarm,multi_s)
    M_sls = sum(M_conc) + sum(M_steel)
    equN = sum(fic) + sum(fis)

    return abs(equN - N)   

0 个答案:

没有答案