Exemple #1
0
def CSL(alphaS, alphaL, K, bkdir): 
    
    Ne, Nd = K.shape 
    H = np.eye((Ne))- np.ones((Ne, Ne))/Ne
    K = np.dot(H, K) 

    for dsafilename1 in glob.iglob(bkdir+"/*.Adjacents_1_*"):         
        A_local1 = read_bk.dsa(dsafilename1)

    for dsafilename2 in glob.iglob(bkdir+"/*.Adjacents_2_*"): 
        A_local2 = read_bk.dsa(dsafilename2)

    #dsafilename1 = bkdir+prefix+'Adjacents_1_'+scenario+'.dsa'
    #dsafilename2 = bkdir+prefix+'Adjacents_2_'+scenario+'.dsa'
    
    nD1 = A_local1.shape[0]-1 
    nD2 = A_local2.shape[0]-1 
    Nei1 = A_local1[:-1, :-1]  
    Nei2 = A_local2[:-1, :-1]  

    r0 = np.concatenate((Nei1, np.zeros((nD1,nD2))), axis=1)  
    r1 = np.concatenate((np.zeros((nD2,nD1)), Nei2), axis=1) 
    Neighbor = np.concatenate((r0, r1), axis=0)

    B = np.identity(Nd)
    for i in range(Nd):
        Ni = np.sum(Neighbor[i,:])-1   
        if Ni > 0:
            B[i,:] = -Neighbor[i,:]/Ni 
            B[i,i] = 1 
        else:
            B[i,:] = -1/(Nd-1)
            B[i,i] = 1    

    svdK = np.linalg.svd(K, compute_uv=False)
    svdB = np.linalg.svd(B, compute_uv=False)
    condNum = svdK[0]/svdB[0]
    
    #BigK = np.concatenate((K, alpha * B), axis=0)
    #KtK = np.dot(BigK.T, BigK)

    I = np.identity(Nd)
    BigK = np.concatenate((K, alphaS*svdK[0]*I,  alphaL*condNum*B), axis=0)
    KtK = np.dot(BigK.T, BigK)

    T = np.dot(np.linalg.inv(KtK),  BigK.T) 
    Imatrix = T[:, :Ne]
    
    return Imatrix 
Exemple #2
0
def tCSL(alphaS, alphaL, alphaT, K, bkdir):#, prefix, scenario):
    
    Ne, Nd = K.shape 
    H = np.eye((Ne))- np.ones((Ne, Ne))/Ne
    K = np.dot(H, K) 
    
    for dsafilename1 in glob.iglob(bkdir+"/*.Adjacents_1_*"): 
        A_local1 = read_bk.dsa(dsafilename1)

    for dsafilename2 in glob.iglob(bkdir+"/*.Adjacents_2_*"):  
        A_local2 = read_bk.dsa(dsafilename2)

    #dsafilename1 = bkdir+prefix+'Adjacents_1_'+scenario+'.dsa'
    #A_local1 = read_dsa.read_dsa(dsafilename1)
    #dsafilename2 = bkdir+prefix+'Adjacents_2_'+scenario+'.dsa'
    #A_local2 = read_dsa.read_dsa(dsafilename2)
    
    nD1 = A_local1.shape[0]-1 
    nD2 = A_local2.shape[0]-1 
    Nei1 = A_local1[:-1, :-1]  
    Nei2 = A_local2[:-1, :-1]  

    r0 = np.concatenate((Nei1, np.zeros((nD1,nD2))), axis=1)  
    r1 = np.concatenate((np.zeros((nD2,nD1)), Nei2), axis=1) 
    Neighbor = np.concatenate((r0, r1), axis=0)

    B = np.identity(Nd)
    for i in range(Nd):
        Ni = np.sum(Neighbor[i,:])-1   
        if Ni > 0:
            B[i,:] = -Neighbor[i,:]/Ni 
            B[i,i] = 1 
            
    Nd3 = 3 * Nd
    K3 = np.concatenate((np.zeros((Ne,Nd)),  K,  np.zeros((Ne,Nd))), axis=1) 
    B3 = np.kron(np.identity(3), B)
    I3 = np.identity(Nd3)
    Bt = np.concatenate((-np.identity(Nd),  2*np.identity(Nd), -np.identity(Nd)), axis=1)  
    BigK = np.concatenate((K3, alphaS * I3,  alphaL * B3,  alphaT * Bt), axis=0)
    KtK = np.dot(BigK.T, BigK)  
    T = np.dot(np.linalg.inv(KtK),  BigK.T) 
    Imatrix = T[Nd:(2*Nd), :Ne]

    return Imatrix
Exemple #3
0
def CSL(phi, K, bkdir):
    ## alphaS 
    Logalpha = np.arange(-6, 7, 1)
    nLcurve = len(Logalpha) 
    LcurveS = [] # Lcurve Residual L2 
    for i in Logalpha: 
        alphai = 10 ** i
        Imat = Imatrix.MN(alphai, K)
        beta = np.dot(Imat, phi) 
        phihat = np.dot(K, beta) 
        phidiff = phi-phihat
        Resid2 = np.sqrt(sum(phidiff*phidiff)) 
        L2 = np.sqrt(sum(beta*beta))
        LcurveS = np.concatenate((LcurveS, [i, Resid2, L2]), axis=0)

    LcurveS =  LcurveS.reshape(nLcurve,3)    
    LcurveS0 = np.array([LcurveS[:,0], LcurveS[:,1]/max(LcurveS[:,1]), LcurveS[:,2]/max(LcurveS[:,2])])    
    LcurveS = LcurveS0.T
  
    Resid2D1 = np.diff(LcurveS[:,1]); Resid2D2 = np.diff(Resid2D1);
    L2D1 = np.diff(LcurveS[:,2]); L2D2 = np.diff(L2D1);

    pho = np.array([LcurveS[:,1], np.concatenate((Resid2D1,[0])), np.concatenate((Resid2D2,[0,0]))])
    pho = pho.T
    eta = np.array([LcurveS[:,2], np.concatenate((L2D1,[0])), np.concatenate((L2D2,[0,0]))])
    eta = eta.T
 
    nume =(np.multiply(pho[:,1], eta[:,2]) - np.multiply(pho[:,2], eta[:,1])) 
    denume = np.power((np.multiply(pho[:,1], pho[:,1]) -  np.multiply(eta[:,1],eta[:,1])), 3/2)
    kappa = np.array(np.divide(nume,denume))
    maxKappa = np.where(abs(kappa) == np.nanmax(abs(kappa)))[0]
    logalphaS = LcurveS[maxKappa[0],0] 

    figLC, axLC = plt.subplots(2,2)
    axLC[0,0].plot(LcurveS[:,0], LcurveS[:,1]); 
    axLC[0,0].set_xlim((Logalpha[0],Logalpha[-1])); 
    axLC[0,0].set_xlabel('alpha'); 
    axLC[0,0].set_ylabel('Residual')
    axLC[0,1].plot(LcurveS[:,0], LcurveS[:,2]); 
    axLC[0,1].set_xlim((Logalpha[0],Logalpha[-1])); 
    axLC[0,1].set_xlabel('alpha'); 
    axLC[0,1].set_ylabel('|J|')
    axLC[1,0].scatter(LcurveS[:,1], LcurveS[:,2]);
    axLC[1,0].set_xlabel('Residual'); 
    axLC[1,0].set_ylabel('|J|')
    axLC[1,1].scatter(LcurveS[:,0], kappa);
    axLC[1,1].set_xlabel('alpha'); 
    axLC[1,1].set_ylabel('kappa')


    fig, ax = plt.subplots()
    ax.scatter(LcurveS[:,1],LcurveS[:,2])
    plt.xlabel('Residual'); plt.ylabel('|J|')
    for i, txt in enumerate(Logalpha):
        ax.annotate(txt, (LcurveS[i,1],LcurveS[i,2]), xytext = (5,1), textcoords = 'offset points')

    ## alphaL 
    Ne, Nd = K.shape   
    for dsafilename1 in glob.iglob(bkdir+"/*.Adjacents_1_*"):         
        A_local1 = read_bk.dsa(dsafilename1)
    for dsafilename2 in glob.iglob(bkdir+"/*.Adjacents_2_*"): 
        A_local2 = read_bk.dsa(dsafilename2)
    
    nD1 = A_local1.shape[0]-1
    nD2 = A_local2.shape[0]-1 
    Nei1 = A_local1[:-1, :-1]
    Nei2 = A_local2[:-1, :-1]  

    r0 = np.concatenate((Nei1, np.zeros((nD1,nD2))), axis=1)  
    r1 = np.concatenate((np.zeros((nD2,nD1)), Nei2), axis=1) 
    Neighbor = np.concatenate((r0, r1), axis=0)

    B = np.identity(Nd)
    for i in range(Nd):
        Ni = np.sum(Neighbor[i,:])-1   
        if Ni > 0:
            B[i,:] = -Neighbor[i,:]/Ni 
            B[i,i] = 1 
        else:
            B[i,:] = -1/(Nd-1)
            B[i,i] = 1    

    alphaS = 10 ** logalphaS 
    Logalpha = np.arange(-6, 7, 1)
    nLcurve = len(Logalpha) 
    LcurveL = [] # np.zeros((nLcurve, 4)) 
    for i in Logalpha: 
        alphaLi = 10 ** i
        Imat = Imatrix.CSL(alphaS, alphaLi, K, bkdir)   
        beta = np.dot(Imat, phi) 
        phihat = np.dot(K, beta) 
        phidiff = phi-phihat
        Resid2 = np.sqrt(sum(phidiff*phidiff)) 
        L2 = np.sqrt(sum(beta * beta))
        Bbeta = np.dot(B, beta)
        BL2 = np.sqrt(sum(Bbeta * Bbeta))
        LcurveL = np.concatenate((LcurveL, [i, Resid2, L2, BL2]), axis=0) 
    
    LcurveL =  LcurveL.reshape(nLcurve, 4)     
    LcurveL0 = np.array([LcurveL[:,0], LcurveL[:,1]/max(LcurveL[:,1]), LcurveL[:,2]/max(LcurveL[:,2]), LcurveL[:,3]/max(LcurveL[:,3])])    
    LcurveL = LcurveL0.T
  
    Resid2D1 = np.diff(LcurveL[:,1]); Resid2D2 = np.diff(Resid2D1);
    L2D1 = np.diff(LcurveL[:,3]); L2D2 = np.diff(L2D1);

    pho = np.array([LcurveL[:,1], np.concatenate((Resid2D1,[0])), np.concatenate((Resid2D2,[0,0]))])
    pho = pho.T
    eta = np.array([LcurveL[:,3], np.concatenate((L2D1,[0])), np.concatenate((L2D2,[0,0]))])
    eta = eta.T
 
    nume =(np.multiply(pho[:,1], eta[:,2]) - np.multiply(pho[:,2], eta[:,1])) 
    denume = np.power((np.multiply(pho[:,1], pho[:,1]) -  np.multiply(eta[:,1],eta[:,1])), 3/2)
    kappa = np.array(np.divide(nume,denume))
    maxKappa = np.where(abs(kappa) == np.nanmax(abs(kappa)))[0]
    logalphaL = LcurveL[maxKappa[0],0] 

    figLCL, axLCL = plt.subplots(2,2)
    axLCL[0,0].plot(LcurveL[:,0], LcurveL[:,1]); 
    axLCL[0,0].set_xlim((Logalpha[0],Logalpha[-1])); 
    axLCL[0,0].set_xlabel('alpha'); 
    axLCL[0,0].set_ylabel('Residual')
    axLCL[0,1].plot(LcurveL[:,0], LcurveL[:,3]); 
    axLCL[0,1].set_xlim((Logalpha[0],Logalpha[-1])); 
    axLCL[0,1].set_xlabel('alpha'); 
    axLCL[0,1].set_ylabel('|BJ|')
    axLCL[1,0].scatter(LcurveL[:,1], LcurveL[:,3]);
    axLCL[1,0].set_xlabel('Residual'); 
    axLCL[1,0].set_ylabel('|BJ|')
    axLCL[1,1].scatter(LcurveL[:,0], kappa);
    axLCL[1,1].set_xlabel('alpha'); 
    axLCL[1,1].set_ylabel('kappa')

    fig, ax = plt.subplots()
    ax.scatter(LcurveL[:,1],LcurveL[:,3])
    plt.xlabel('Residual'); plt.ylabel('|BJ|')
    for i, txt in enumerate(Logalpha):
        ax.annotate(txt, (LcurveL[i,1],LcurveL[i,3]), xytext = (5,1), textcoords = 'offset points')

    logalpha = logalphaS, LcurveS, logalphaL, LcurveL
    
    return logalpha  
Exemple #4
0
def CSL(phi, K, bkdir):
    ## alphaS
    Logalpha = np.arange(-6, 7, 1)
    nLcurve = len(Logalpha)
    LcurveS = []  # Lcurve Residual L2
    for i in Logalpha:
        alphai = 10**i
        Imat = Imatrix.MN(alphai, K)
        beta = np.dot(Imat, phi)
        phihat = np.dot(K, beta)
        phidiff = phi - phihat
        Resid2 = np.sqrt(sum(phidiff * phidiff))
        L2 = np.sqrt(sum(beta * beta))
        LcurveS = np.concatenate((LcurveS, [i, Resid2, L2]), axis=0)

    LcurveS = LcurveS.reshape(nLcurve, 3)
    LcurveS0 = np.array([
        LcurveS[:, 0], LcurveS[:, 1] / max(LcurveS[:, 1]),
        LcurveS[:, 2] / max(LcurveS[:, 2])
    ])
    LcurveS = LcurveS0.T

    Resid2D1 = np.diff(LcurveS[:, 1])
    Resid2D2 = np.diff(Resid2D1)
    L2D1 = np.diff(LcurveS[:, 2])
    L2D2 = np.diff(L2D1)

    pho = np.array([
        LcurveS[:, 1],
        np.concatenate((Resid2D1, [0])),
        np.concatenate((Resid2D2, [0, 0]))
    ])
    pho = pho.T
    eta = np.array([
        LcurveS[:, 2],
        np.concatenate((L2D1, [0])),
        np.concatenate((L2D2, [0, 0]))
    ])
    eta = eta.T

    nume = (np.multiply(pho[:, 1], eta[:, 2]) -
            np.multiply(pho[:, 2], eta[:, 1]))
    denume = np.power((np.multiply(pho[:, 1], pho[:, 1]) -
                       np.multiply(eta[:, 1], eta[:, 1])), 3 / 2)
    kappa = np.array(np.divide(nume, denume))
    maxKappa = np.where(abs(kappa) == np.nanmax(abs(kappa)))[0]
    logalphaS = LcurveS[maxKappa[0], 0]

    figLC, axLC = plt.subplots(2, 2)
    axLC[0, 0].plot(LcurveS[:, 0], LcurveS[:, 1])
    axLC[0, 0].set_xlim((Logalpha[0], Logalpha[-1]))
    axLC[0, 0].set_xlabel('alpha')
    axLC[0, 0].set_ylabel('Residual')
    axLC[0, 1].plot(LcurveS[:, 0], LcurveS[:, 2])
    axLC[0, 1].set_xlim((Logalpha[0], Logalpha[-1]))
    axLC[0, 1].set_xlabel('alpha')
    axLC[0, 1].set_ylabel('|J|')
    axLC[1, 0].scatter(LcurveS[:, 1], LcurveS[:, 2])
    axLC[1, 0].set_xlabel('Residual')
    axLC[1, 0].set_ylabel('|J|')
    axLC[1, 1].scatter(LcurveS[:, 0], kappa)
    axLC[1, 1].set_xlabel('alpha')
    axLC[1, 1].set_ylabel('kappa')

    fig, ax = plt.subplots()
    ax.scatter(LcurveS[:, 1], LcurveS[:, 2])
    plt.xlabel('Residual')
    plt.ylabel('|J|')
    for i, txt in enumerate(Logalpha):
        ax.annotate(txt, (LcurveS[i, 1], LcurveS[i, 2]),
                    xytext=(5, 1),
                    textcoords='offset points')

    ## alphaL
    Ne, Nd = K.shape
    for dsafilename1 in glob.iglob(bkdir + "/*.Adjacents_1_*"):
        A_local1 = read_bk.dsa(dsafilename1)
    for dsafilename2 in glob.iglob(bkdir + "/*.Adjacents_2_*"):
        A_local2 = read_bk.dsa(dsafilename2)

    nD1 = A_local1.shape[0] - 1
    nD2 = A_local2.shape[0] - 1
    Nei1 = A_local1[:-1, :-1]
    Nei2 = A_local2[:-1, :-1]

    r0 = np.concatenate((Nei1, np.zeros((nD1, nD2))), axis=1)
    r1 = np.concatenate((np.zeros((nD2, nD1)), Nei2), axis=1)
    Neighbor = np.concatenate((r0, r1), axis=0)

    B = np.identity(Nd)
    for i in range(Nd):
        Ni = np.sum(Neighbor[i, :]) - 1
        if Ni > 0:
            B[i, :] = -Neighbor[i, :] / Ni
            B[i, i] = 1
        else:
            B[i, :] = -1 / (Nd - 1)
            B[i, i] = 1

    alphaS = 10**logalphaS
    Logalpha = np.arange(-6, 7, 1)
    nLcurve = len(Logalpha)
    LcurveL = []  # np.zeros((nLcurve, 4))
    for i in Logalpha:
        alphaLi = 10**i
        Imat = Imatrix.CSL(alphaS, alphaLi, K, bkdir)
        beta = np.dot(Imat, phi)
        phihat = np.dot(K, beta)
        phidiff = phi - phihat
        Resid2 = np.sqrt(sum(phidiff * phidiff))
        L2 = np.sqrt(sum(beta * beta))
        Bbeta = np.dot(B, beta)
        BL2 = np.sqrt(sum(Bbeta * Bbeta))
        LcurveL = np.concatenate((LcurveL, [i, Resid2, L2, BL2]), axis=0)

    LcurveL = LcurveL.reshape(nLcurve, 4)
    LcurveL0 = np.array([
        LcurveL[:, 0], LcurveL[:, 1] / max(LcurveL[:, 1]),
        LcurveL[:, 2] / max(LcurveL[:, 2]), LcurveL[:, 3] / max(LcurveL[:, 3])
    ])
    LcurveL = LcurveL0.T

    Resid2D1 = np.diff(LcurveL[:, 1])
    Resid2D2 = np.diff(Resid2D1)
    L2D1 = np.diff(LcurveL[:, 3])
    L2D2 = np.diff(L2D1)

    pho = np.array([
        LcurveL[:, 1],
        np.concatenate((Resid2D1, [0])),
        np.concatenate((Resid2D2, [0, 0]))
    ])
    pho = pho.T
    eta = np.array([
        LcurveL[:, 3],
        np.concatenate((L2D1, [0])),
        np.concatenate((L2D2, [0, 0]))
    ])
    eta = eta.T

    nume = (np.multiply(pho[:, 1], eta[:, 2]) -
            np.multiply(pho[:, 2], eta[:, 1]))
    denume = np.power((np.multiply(pho[:, 1], pho[:, 1]) -
                       np.multiply(eta[:, 1], eta[:, 1])), 3 / 2)
    kappa = np.array(np.divide(nume, denume))
    maxKappa = np.where(abs(kappa) == np.nanmax(abs(kappa)))[0]
    logalphaL = LcurveL[maxKappa[0], 0]

    figLCL, axLCL = plt.subplots(2, 2)
    axLCL[0, 0].plot(LcurveL[:, 0], LcurveL[:, 1])
    axLCL[0, 0].set_xlim((Logalpha[0], Logalpha[-1]))
    axLCL[0, 0].set_xlabel('alpha')
    axLCL[0, 0].set_ylabel('Residual')
    axLCL[0, 1].plot(LcurveL[:, 0], LcurveL[:, 3])
    axLCL[0, 1].set_xlim((Logalpha[0], Logalpha[-1]))
    axLCL[0, 1].set_xlabel('alpha')
    axLCL[0, 1].set_ylabel('|BJ|')
    axLCL[1, 0].scatter(LcurveL[:, 1], LcurveL[:, 3])
    axLCL[1, 0].set_xlabel('Residual')
    axLCL[1, 0].set_ylabel('|BJ|')
    axLCL[1, 1].scatter(LcurveL[:, 0], kappa)
    axLCL[1, 1].set_xlabel('alpha')
    axLCL[1, 1].set_ylabel('kappa')

    fig, ax = plt.subplots()
    ax.scatter(LcurveL[:, 1], LcurveL[:, 3])
    plt.xlabel('Residual')
    plt.ylabel('|BJ|')
    for i, txt in enumerate(Logalpha):
        ax.annotate(txt, (LcurveL[i, 1], LcurveL[i, 3]),
                    xytext=(5, 1),
                    textcoords='offset points')

    logalpha = logalphaS, LcurveS, logalphaL, LcurveL

    return logalpha