Ejemplo n.º 1
0
def J_f_total_v(phiPS_a_v, HP, u, phiPS_ori, f0=0):
    phiori = phiPS_ori[0]
    phisori = phiPS_ori[1]

    phia = phiPS_a_v[0]
    phisa = phiPS_a_v[1]
    v = phiPS_a_v[2]
    phib = (phiori - v * phia) / (1 - v)
    phisb = (phisori - v * phisa) / (1 - v)
    #print(phia ,phisa, phib,phisb, v)

    xeffa = tt.x_eff(HP, phia, phisa, u)
    fa = tt.f_eng(HP, phia, phisa, u, x=xeffa)
    dfa, dfsa = tt.df_eng(HP, phia, phisa, u, x=xeffa)

    xeffb = tt.x_eff(HP, phib, phisb, u)
    fb = tt.f_eng(HP, phib, phisb, u, x=xeffb)
    dfb, dfsb = tt.df_eng(HP, phib, phisb, u, x=xeffb)

    J = np.empty(3)
    J[0] = v * (dfa - dfb)
    J[1] = v * (dfsa - dfsb)
    J[2] = fa - fb + (phib - phia) * dfb + (phisb - phisa) * dfsb

    return invT * J
Ejemplo n.º 2
0
def Eng_all(phi_all, u, HP, phis, phi0, f0):

    phi1 = phi_all[0]
    phi2 = phi_all[1]
    v = (phi2 - phi0) / (phi2 - phi1)

    f1 = tt.f_eng(HP, phi1, phis, u)
    f2 = tt.f_eng(HP, phi2, phis, u)

    fall = invT * (v * f1 + (1 - v) * f2 - f0)
    #print(phi_all, fall)

    return fall
Ejemplo n.º 3
0
def f_total_v(phiPS_a_v, HP, u, phiPS_ori, f0):
    phiori = phiPS_ori[0]
    phisori = phiPS_ori[1]

    phia = phiPS_a_v[0]
    phisa = phiPS_a_v[1]
    v = phiPS_a_v[2]
    phib = (phiori - v * phia) / (1 - v)
    phisb = (phisori - v * phisa) / (1 - v)

    fa = tt.f_eng(HP, phia, phisa, u)
    fb = tt.f_eng(HP, phib, phisb, u)

    #print(phia ,phisa, phib,phisb, v)
    return invT * (v * fa + (1 - v) * fb - f0)
Ejemplo n.º 4
0
def J_Eng_all(phi_all, u, HP, phis, phi0, f0):
    phi1 = phi_all[0]
    phi2 = phi_all[1]
    v = (phi2 - phi0) / (phi2 - phi1)

    xeff1 = tt.x_eff(HP, phi1, phis, u) if tt.useleff else 1
    f1 = tt.f_eng(HP, phi1, phis, u, x=xeff1)
    df1 = tt.df_eng(HP, phi1, phis, u, x=xeff1)[0]

    xeff2 = tt.x_eff(HP, phi2, phis, u) if tt.useleff else 1
    f2 = tt.f_eng(HP, phi2, phis, u, x=xeff2)
    df2 = tt.df_eng(HP, phi2, phis, u, x=xeff2)[0]

    J = np.empty(2)

    J[0] = v * ((f1 - f2) / (phi2 - phi1) + df1)
    J[1] = (1 - v) * ((f1 - f2) / (phi2 - phi1) + df2)

    #print(J)

    return invT * J
Ejemplo n.º 5
0
def ps_bi_solve( HP, u, phiPS_ori ,r_vini, useJ ): 
    err = phi_min_calc

    phiori = phiPS_ori[0] 
    phisori = phiPS_ori[1]  

    f0 = tt.f_eng(HP, phiori, phisori, u)

    phi_ini = [phiori*0.5, phisori*0.95 ]

    vini = [r_vini*vmin(phi_ini, phiPS_ori)]
    inis = phi_ini + vini

    #print(inis)
    cons_all = ( {'type':'ineq', 'fun': lambda x:   x[0]-err }, \
                 {'type':'ineq', 'fun': lambda x: 1-x[0]-err }, \
                 {'type':'ineq', 'fun': lambda x:   x[1]-err }, \
                 {'type':'ineq', 'fun': lambda x: 1-x[1]-err }, \
                 {'type':'ineq', 'fun': lambda x: 1-x[0]-x[1]-err }, \
                 {'type':'ineq', 'fun': lambda x:   x[2]-err }, \
                 {'type':'ineq', 'fun': lambda x: vmin(x,phiPS_ori)-x[2]-err } \
               )


    if useJ:
        result = sco.minimize( f_total_v, inis,\
                               args = (HP, u, phiPS_ori, f0), \
                               method = 'SLSQP', \
                               jac = J_f_total_v, \
                               constraints = cons_all, \
                               tol = err/100, \
                               options={'ftol': err, 'eps': err} )
    else:
        result = sco.minimize( f_total_v, inis,\
                               args = (HP, u, phiPS_ori, f0), \
                               method = 'COBYLA', 
                               constraints = cons_all, \
                               tol = err/100 )  

    #print(result.x)
    phia = result.x[0]
    phisa = result.x[1]
    v     = result.x[2]
    phib = (phiori-v*phia)/(1-v)
    phisb = (phisori-v*phisa)/(1-v)
    if phia > phib:
        t1, t2 = phib, phisb
        phib, phisb = phia, phisa
        phia, phisa = t1, t2
        v = 1-v
 
    return [phia, phisa, phib, phisb, v]
Ejemplo n.º 6
0
def ps_bi_solve(HP, phis, u, phi_sps, phi_ori=None):
    err = phi_min_calc
    phi_max = (1 - 2 * phis) / (1 + HP['pc']) - err
    sps1, sps2 = phi_sps

    phi_all_ini = [sps1 * 0.9, sps2 * 1.1]
    if phi_ori == None:
        phi_ori = (sps1 + sps2) / 2

    f_ori = tt.f_eng(HP, phi_ori, 0, u)

    result = sco.minimize( Eng_all, phi_all_ini, \
                           args = (u, HP, phis, phi_ori, f_ori), \
                           method = 'L-BFGS-B', \
                           jac = J_Eng_all, \
                           bounds = ((err,sps1-err), (sps2+err,phi_max)), \
                           options={'ftol':1e-20, 'gtol':1e-20, 'eps':1e-20} )
    bi1 = min(result.x)
    bi2 = max(result.x)
    return bi1, bi2