コード例 #1
0
ファイル: DAtest.py プロジェクト: Ewan82/DA_code
def LmodtestM(lam,i, p):
    x0=np.array([56.,100.,760.,35.,9888.])
    dx=np.array([5.6,10.,76.,3.5,988.8])
    x0h=x0+lam*dx
    dxlam=lam*dx
    mxdx=DAm.nldalec(x0h,i)[1][i-1]
    mx=DAm.nldalec(x0,i)[1][i-1]
    M=DAm.ldalec(x0,i)[2]
    Mdx=M*np.matrix(dxlam).T
    if p=='all':
        err=(np.linalg.norm(mxdx-mx))/(np.linalg.norm(Mdx))
    else:
        err=(np.linalg.norm(mxdx[p]-mx[p]))/(np.linalg.norm(Mdx[p]))
    return err #(np.linalg.norm(mxdx))/(np.linalg.norm(Mdx)+np.linalg.norm(mx))
コード例 #2
0
ファイル: DACost3.py プロジェクト: Ewan82/DA_code
def d2J(X):
    Mlist,GPP_diff=DAm.ldalec(X,lenrun)
    nlhx=DAm.nldalec(X,lenrun)
    X1=[X[0],X[1],X[2],X[3],X[4]]
    X0=np.matrix(X1).T

    #Figure out Hi's, y and y_err
    H=[]
    hx=[]
    y=[]
    y_err=[]
    for x in range(lenrun):
        temp=[]
        temp2=[]
        yi=[]
        yi_err=[]
        obs=False
        if d.gpp[x]!=None:
            temp.append([GPP_diff[x],0,0,0,0])
            temp2.append(nlhx[x,0])
            yi=np.append(yi,[d.gpp[x]])
            yi_err=np.append(yi_err,[d.gpp_err[x]**2])
	    obs=True
        if d.lf[x]!=None:
            temp.append([d.p_5,0,0,0,0])
            temp2.append(nlhx[x,1])
            yi=np.append(yi,[d.lf[x]])
            yi_err=np.append(yi_err,[d.lf_err[x]**2])
	    obs=True
        if d.lw[x]!=None:
            temp.append([0,0,d.p_6,0,0])
            temp2.append(nlhx[x,2])
            yi=np.append(yi,[d.lw[x]])
            yi_err=np.append(yi_err,[d.lw_err[x]**2])
	    obs=True
        if d.rt[x]!=None:
            temp.append([d.p_2*GPP_diff[x],0,0,d.p_8*d.T[x],d.p_9*d.T[x]])
            temp2.append(nlhx[x,3])
            yi=np.append(yi,[d.rt[x]])
            yi_err=np.append(yi_err,[d.rt_err[x]**2])
	    obs=True
        if d.nee[x]!=None:
            temp.append([-(1-d.p_2)*GPP_diff[x],0,0,-d.p_8*d.T[x],-d.p_9*d.T[x]])
            temp2.append(nlhx[x,4])
            yi=np.append(yi,[d.nee[x]])
            yi_err=np.append(yi_err,[d.nee_err[x]**2])
	    obs=True
        if obs==False:
            temp.append([0,0,0,0,0])
            temp2.append(0)
            yi=np.append(yi,0)
            yi_err=np.append(yi_err,0)
        H.append(np.matrix(np.vstack(temp)))    
        hx.append(temp2)
        y.append(yi)
        y_err.append(yi_err)

    #yhx=np.matrix((np.hstack(y)-np.hstack(hx))).T
    #R=Rmat(np.hstack(y_err))

    stacklist=[H[0]] #Creates H hat matrix
    for x in xrange(1,lenrun):
        stacklist.append(H[x]*Mfac(Mlist,x))

    #Hhat=np.matrix(np.vstack(stacklist))
    
    #d2J=B.I+Hhat.T*R.I*Hhat
    #Incr=[np.matrix(Rmat(y_err[i])).I*yhx[i] for i in range(0,lenrun,1)]
    d2jlist=[0]*lenrun
    for i in range(lenrun):
        if np.linalg.norm(y_err[i])!=0:
            d2jlist[i]=stacklist[i].T*np.matrix(Rmat(y_err[i])).I*stacklist[i]

    d2J=B.I+sum(d2jlist)
    
    return d2J
コード例 #3
0
ファイル: DACost3.py プロジェクト: Ewan82/DA_code
def dJ(X):
    Mlist,GPP_diff,M=DAm.ldalec(X,lenrun) #run linear model out list of linear model matrices and value for GPP derivative at each time step
    nlhx=DAm.nldalec(X,lenrun)[0] #run nonlinear model for obs guess output
    X1=[X[0],X[1],X[2],X[3],X[4]]
    X0=np.matrix(X1).T

    #Creates H_i's, y_i's and y_err_i's
    H=[] #linear obs operator
    hx=[] #h(x)
    y=[] #obs
    y_err=[] #obs error
    for x in range(lenrun):
        temp=[]
        temp2=[]
        yi=[]
        yi_err=[]
        obs=False
        if d.gpp[x]!=None:
            temp.append([GPP_diff[x],0,0,0,0])
            temp2.append(nlhx[x,0])
            yi=np.append(yi,[d.gpp[x]])
            yi_err=np.append(yi_err,[d.gpp_err[x]**2])
            obs=True
        if d.lf[x]!=None:
            temp.append([d.p_5,0,0,0,0])
            temp2.append(nlhx[x,1])
            yi=np.append(yi,[d.lf[x]])
            yi_err=np.append(yi_err,[d.lf_err[x]**2])
            obs=True
        if d.lw[x]!=None:
            temp.append([0,0,d.p_6,0,0])
            temp2.append(nlhx[x,2])
            yi=np.append(yi,[d.lw[x]])
            yi_err=np.append(yi_err,[d.lw_err[x]**2])
            obs=True
        if d.rt[x]!=None:
            temp.append([d.p_2*GPP_diff[x],0,0,d.p_8*d.T[x],d.p_9*d.T[x]])
            temp2.append(nlhx[x,3])
            yi=np.append(yi,[d.rt[x]])
            yi_err=np.append(yi_err,[d.rt_err[x]**2])
            obs=True
        if d.nee[x]!=None:
            temp.append([-(1-d.p_2)*GPP_diff[x],0,0,-d.p_8*d.T[x],-d.p_9*d.T[x]])
            temp2.append(nlhx[x,4])
            yi=np.append(yi,[d.nee[x]])
            yi_err=np.append(yi_err,[d.nee_err[x]**2])
            obs=True
        if d.cf[x]!=None:
            temp.append([1,0,0,0,0])
            temp2.append(nlhx[x,5])
            yi=np.append(yi,[d.cf[x]])
            yi_err=np.append(yi_err,[d.cf_err[x]**2])
            obs=True
        if obs==False:
            temp.append([0,0,0,0,0])
            temp2.append(0)
            yi=np.append(yi,0)
            yi_err=np.append(yi_err,0)
        H.append(np.matrix(np.vstack(temp)))    
        hx.append(np.matrix(temp2))
        y.append(np.matrix(yi))
        y_err.append((yi_err))

    yhx=[y[i].T-hx[i].T for i in range(len(y))] #Create y-h(x) incriment

    #stacklist1=[H[0]] #Creates H hat matrix
    #for x in xrange(1,len(y)):
    #    stacklist1.append(H[x]*Mfac(Mlist,x))

    stacklist2=[H[0].T] #creats M^T*H^T for each time step
    for x in xrange(1,len(y)):
        stacklist2.append(MfacAdj(Mlist,x)*H[x].T)

    #Incr=[stacklist2[i]*np.matrix(Rmat(y_err[i])).I*yhx[i] for i in range(len(y))] #Creates obs incriment
    
    Incr=[]
    for i in range(lenrun):
        if np.linalg.norm(y_err[i])!=0:
            Incr.append(stacklist2[i]*np.matrix(Rmat(y_err[i])).I*yhx[i])
    
    dJ=B.I*(X0-XB) -np.sum(Incr, axis=0) #Cost function first derivative
    dJlist=[float(dJ[0]),float(dJ[1]),float(dJ[2]),float(dJ[3]),float(dJ[4])]
    
    return dJ.T #np.array(dJlist) 
コード例 #4
0
ファイル: DAtest.py プロジェクト: Ewan82/DA_code
def Adjtest(i):
    Mlist,gppdiff=DAm.ldalec(x0,i)
    M=DAC3.Mfac(Mlist,i)
    MT=DAC3.MfacAdj(Mlist,i)
    t=M*np.matrix(dx).T
    return t.T*t, np.matrix(dx)*MT*t