Пример #1
0
for i in range(N+1):
    Jac[i,i] = 1.
#print 'J is', Jac
#Jac0 = np.copy(Jac)                 #** ALT AT 26/03 - ADDING THIS VARIABLE TO ALL Jac CALCULATIONS**
dsdx = np.zeros([DM,N+1])  
dxds = np.zeros([N+1,DM]) 



## Running from 0 to 10
for w in range(10):
    random = np.zeros(N+1)
    #random = np.random.randn(N+1)
    x[:,w+1] = mod.lorenz96(x[:,w],random,dt)  
    
    dfdx = mod.df(x[:,w])         

    #######Jac = Jac + dt*(np.dot(dfdx,Jac))   
    Jac = Jac*(np.exp(dt*dfdx))   
    print 'Initial Jacs', Jac

##print 'x10 is', x[:,10]
        
# Main loop        
mcn = 0
summation = np.zeros(N+1)
run = 500
count = 1
integ = DM*ns   
differ = np.zeros(DM)  
scount = 0
Пример #2
0
x[:, 10] = x[:, 0]
##for t in range(10, run):
for t in range(run):
    S[0] = np.transpose(np.dot(H, x[:, t]))
    Y[0] = y[:, t]
    dsdx[0, :] = H
    Jac = Jac0

    for n in range(2, DM + 1):
        for i in range(1, ns + 1):
            tt = t + (i - 1 + (n - 1) * ns)

            #random = np.zeros(N)
            x[:, tt + 1] = mod.lorenz96(x[:, tt], random, dt)
            ####f = mod.l95(x[:,tt],dt)
            dfdx = mod.df(x[:, tt])
            #print 'dfdx', dfdx
            Jac = np.dot(dfdx, Jac)

        idxs = MO * (n - 2) + MO
        S[idxs] = np.transpose(np.dot(H, x[:, tt + 1]))
        idxy = t + (n - 1) * ns
        Y[idxs] = y[:, idxy]

        dsdx[idxs, :] = Jac[0, :]

    dxds = np.linalg.pinv(dsdx)
    ########dxds = np.linalg.pinv(dsdx,rcond=2.22e-16)

    dif = Y - S
Пример #3
0
##for t in range(10, run):
for t in range(run):
    ####if (t == tobs[mcn]): 
    if (t == 10): 
        ##ldelay = integ + t
        ####print 'Initial x10 is', x[:,10]
        ####print 'Initial dsdx', dsdx
        ldelay = integ + mcn*ns
        ####print 'ldelay', ldelay
        for m in range(t,ldelay+1):             ## ldelay + 1 really needed or only ldelay is enough? ##
            if m == t:
                random = np.zeros(N+1)
                x[:,m+1] = mod.lorenz96(x[:,m],random,dt) 
                ####print 'Jac', Jac[0,:]
                dsdx[scount,:] = Jac[0,:] 
                dfdx = mod.df(x[:,m])
                Jac = Jac + dt*(np.dot(dfdx,Jac))
                ########Jac = Jac*(np.exp(dt*dfdx))   
                ####print 'Second dsdx', dsdx
                scount = scount + 1
            else:
                random = np.zeros(N+1)
                #random = np.random.randn(N+1)
                x[:,m+1] = mod.lorenz96(x[:,m],random,dt)  
                #print 'x is', x[:,m+1]
                dfdx = mod.df(x[:,m])
                Jac = Jac + dt*(np.dot(dfdx,Jac))   ## SEE IF Jac SHOULD BE FROM TIME 9 TO 10 ##
                ######Jac = Jac*(np.exp(dt*dfdx))   
                Jaclast = Jac
                newcount = (count+1)*ns
                if (m+1 == newcount):          
Пример #4
0
    for m in range(2, M + 1):
        for i in range(1, int(nTau) + 1):
            tt = t + dt * (i - 1 + (m - 1) * nTau)

            ##Jacsize = D**2
            ##Jacv = Jac.reshape(Jacsize)       # creates an array (Jacsize,)
            ##Jacvec = Jacv.reshape(Jacsize,1)  # creates an array (Jacsize,1)
            ##dxdt = mod.dxdt(xx,Jacvec,D,dt)
            ##xtran = mod.rk4(dxdt,dt)
            ##xx = xtran[0:D]
            ##print 'n=', n, 'xx at m', m, 'is', xx
            ##Jact = xtran[D:]
            ##Jac = Jact.reshape(D,D)

            dfdx = mod.df(xx)
            random = np.zeros(D)
            xx = mod.lorenz96(xx, random, dt)
            Jac = Jac + dt * (np.dot(dfdx, Jac))
            #print 'xx at m', m, 'is', xx
            #dfdx = mod.df(xx)
            #print 'dfdx', dfdx

            #print 'n=', n, 'xx at m', m, 'is', xx
            #####Jac = np.dot(dfdx,Jac)
            #print 'Jac', Jac
            #########Jacsize = D**2
            #########Jacv = Jac.reshape(Jacsize)
            #########Jacvec = Jacv.reshape(Jacsize,1)
            #########f,Jac = mod.dxdt(xx,Jacvec,D,dt)
            #f = dxdt[0:D]
Пример #5
0
    for m in range(2,M+1):
        for i in range(1,int(nTau)+1):
            tt = t + dt*(i-1+(m-1)*nTau)
            
            ##Jacsize = D**2
            ##Jacv = Jac.reshape(Jacsize)       # creates an array (Jacsize,)
            ##Jacvec = Jacv.reshape(Jacsize,1)  # creates an array (Jacsize,1)
            ##dxdt = mod.dxdt(xx,Jacvec,D,dt)
            ##xtran = mod.rk4(dxdt,dt)
            ##xx = xtran[0:D]
            ##print 'n=', n, 'xx at m', m, 'is', xx
            ##Jact = xtran[D:]
            ##Jac = Jact.reshape(D,D)
            
            dfdx = mod.df(xx)
            random = np.zeros(D)
            xx = mod.lorenz96(xx,random,dt) 
            Jac = Jac + dt*(np.dot(dfdx,Jac))
            #print 'xx at m', m, 'is', xx
            #dfdx = mod.df(xx)
            #print 'dfdx', dfdx
            
            #print 'n=', n, 'xx at m', m, 'is', xx
            #####Jac = np.dot(dfdx,Jac)  
            #print 'Jac', Jac
            #########Jacsize = D**2
            #########Jacv = Jac.reshape(Jacsize) 
            #########Jacvec = Jacv.reshape(Jacsize,1)
            #########f,Jac = mod.dxdt(xx,Jacvec,D,dt)
            #f = dxdt[0:D]
Пример #6
0
            #####if m == t:
            #####    random = np.zeros(N+1)
            #####    x[:,m+1] = mod.lorenz96(x[:,m],random,dt) 
               
            #####    dsdx[scount,:] = Jac[0,:] 
            #####    dfdx = mod.df(x[:,m])
            #####    Jac = Jac + dt*(np.dot(dfdx,Jac))
               
            #####    scount = scount + 1
            #####else:
        random = np.zeros(N)
                #random = np.random.randn(N+1)
        x[:,m+1] = mod.lorenz96(x[:,m],random,dt)  
        #print 'x size', x[:,m].shape      
        
        dfdx = mod.df(x[:,m])

        Jacvec = Jac.reshape(jacsize)
        #print 'Jacvec size', Jacvec.shape
        randJ = np.zeros(jacsize)
        Jacstep = mod.lorenz96(Jacvec,randJ,dt)  
        Jac = Jacstep.reshape(N,N)
        #print 'Jac is', Jac
                ######Jac = Jac + dt*(np.dot(dfdx,Jac))  
                #####Jac = Jac*(np.exp(dt*dfdx))   
                #Jaclast = Jac
        newcount = (count+1)*ns
        if (m+1 == newcount):          
            dsdx[scount,:] = Jac[0,:] 
                   
            scount = scount + 1
Пример #7
0
dxds = np.zeros([N + 1, DM])

count = 0

# Running x with pure Lorenz to calculate the initial S
integ = DM * ns
for t in range(integ + 1):
    #random = np.random.randn(N+1)
    # Taking off randomness from the model (deterministic in the article) ***** PJ - 19/03 *****
    random = np.zeros(N + 1)
    x[:, t + 1] = mod.lorenz96(x[:, t], random, dt)
    #print 'x at', t, 'is', x[:,t+1]

    # Calculating dF/dx, J, dS/dx for the first 100 steps
    dfdx = mod.df(
        x[:, t]
    )  # CORRECTION MADE:1st dfdx to be calculated shall be from x[:0] ** Me - 22/04**
    #print 'dfdx', dfdx
    Jac = Jac + dt * (np.dot(dfdx, Jac))
    #print 'Jac is', Jac
    if (t == tobs[count]):
        #for a in range(DM):
        dsdx[count, :] = Jac[0, :]
        count = count + 1
#print 'Initial dsdx is', dsdx

# Calculating initial dx/dS (10-100)
#dxds = np.linalg.pinv(dsdx,rcond=1e-16)
dxds = np.linalg.pinv(
    dsdx
)  ####  CHECK IF THE COMPLETE CALCULATION WILL BE NEEDED!!!!!!!!########
Пример #8
0
x[:,10] = x[:,0]
##for t in range(10, run):
for t in range(run):
    S[0] = np.transpose(np.dot(H,x[:,t]))    
    Y[0] = y[:,t]
    dsdx[0,:] = H
    Jac = Jac0
    
    for n in range(2,DM+1):
        for i in range(1,ns+1):
            tt = t + (i-1+(n-1)*ns)
          
            #random = np.zeros(N)
            x[:,tt+1] = mod.lorenz96(x[:,tt],random,dt) 
            ####f = mod.l95(x[:,tt],dt) 
            dfdx = mod.df(x[:,tt])
            #print 'dfdx', dfdx
            Jac = np.dot(dfdx,Jac)
          
        idxs = MO*(n-2) + MO
        S[idxs] = np.transpose(np.dot(H,x[:,tt+1]))     
        idxy = t + (n-1)*ns
        Y[idxs] = y[:,idxy]
        
        dsdx[idxs,:] = Jac[0,:] 
      
    dxds = np.linalg.pinv(dsdx)        
    ########dxds = np.linalg.pinv(dsdx,rcond=2.22e-16)
          
    
    dif = Y - S
Пример #9
0
        #####if m == t:
        #####    random = np.zeros(N+1)
        #####    x[:,m+1] = mod.lorenz96(x[:,m],random,dt)

        #####    dsdx[scount,:] = Jac[0,:]
        #####    dfdx = mod.df(x[:,m])
        #####    Jac = Jac + dt*(np.dot(dfdx,Jac))

        #####    scount = scount + 1
        #####else:
        random = np.zeros(N)
        #random = np.random.randn(N+1)
        x[:, m + 1] = mod.lorenz96(x[:, m], random, dt)
        #print 'x size', x[:,m].shape

        dfdx = mod.df(x[:, m])

        Jacvec = Jac.reshape(jacsize)
        #print 'Jacvec size', Jacvec.shape
        randJ = np.zeros(jacsize)
        Jacstep = mod.lorenz96(Jacvec, randJ, dt)
        Jac = Jacstep.reshape(N, N)
        #print 'Jac is', Jac
        ######Jac = Jac + dt*(np.dot(dfdx,Jac))
        #####Jac = Jac*(np.exp(dt*dfdx))
        #Jaclast = Jac
        newcount = (count + 1) * ns
        if (m + 1 == newcount):
            dsdx[scount, :] = Jac[0, :]

            scount = scount + 1
Пример #10
0
dxds = np.zeros([N+1,DM]) 


count = 0

# Running x with pure Lorenz to calculate the initial S
integ = DM*ns   
for t in range(integ+1):
    #random = np.random.randn(N+1)
    # Taking off randomness from the model (deterministic in the article) ***** PJ - 19/03 *****
    random = np.zeros(N+1)
    x[:,t+1] = mod.lorenz96(x[:,t],random,dt)  
    #print 'x at', t, 'is', x[:,t+1]

    # Calculating dF/dx, J, dS/dx for the first 100 steps    
    dfdx = mod.df(x[:,t])         # CORRECTION MADE:1st dfdx to be calculated shall be from x[:0] ** Me - 22/04**
    #print 'dfdx', dfdx
    Jac = Jac + dt*(np.dot(dfdx,Jac))         
    #print 'Jac is', Jac    
    if (t == tobs[count]):    
        #for a in range(DM): 
        dsdx [count,:] = Jac[0,:] 
        count = count + 1
#print 'Initial dsdx is', dsdx

# Calculating initial dx/dS (10-100)
#dxds = np.linalg.pinv(dsdx,rcond=1e-16)
dxds = np.linalg.pinv(dsdx)                 ####  CHECK IF THE COMPLETE CALCULATION WILL BE NEEDED!!!!!!!!########
#print 'dxds', dxds

# Y and S