From c7a09de80c6b43110425f1161ad861e23fc65f66 Mon Sep 17 00:00:00 2001 From: Arno Solin Date: Thu, 30 Jan 2014 18:50:54 +0200 Subject: [PATCH] Now also the derivative matrices can be summed. --- GPy/kern/kern.py | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/GPy/kern/kern.py b/GPy/kern/kern.py index 7b2c01e4..b7a9f832 100644 --- a/GPy/kern/kern.py +++ b/GPy/kern/kern.py @@ -577,38 +577,50 @@ class kern(Parameterized): def sde(self): # TODO: should support adding kernels together - #raise NameError('HiThere') + #raise NameError('Problem') # Find out state dimensions - n = 0; - nq = 0; + n = 0 + nq = 0 + nd = 0 for p in self.parts: - (F,L,Qc,H,Pinf) = p.sde() - n += F.shape[0] + (F,L,Qc,H,Pinf,dF,dQc,dPinf) = p.sde() + n += F.shape[0] nq += Qc.shape[0] + nd += dF.shape[2] # Allocate space for the matrices - F = np.zeros((n,n)) - L = np.zeros((n,nq)) - Qc = np.zeros((nq,nq)) - H = np.zeros((1,n)) - Pinf = np.zeros((n,n)) - n = 0; - nq = 0; + F = np.zeros((n,n)) + L = np.zeros((n,nq)) + Qc = np.zeros((nq,nq)) + H = np.zeros((1,n)) + Pinf = np.zeros((n,n)) + dF = np.zeros((n,n,nd)) + dQc = np.zeros((nq,nq,nd)) + dPinf = np.zeros((n,n,nd)) + n = 0 + nq = 0 + nd = 0 # Assign models for p in self.parts: - (Ft,Lt,Qct,Ht,Pinft) = p.sde() + (Ft,Lt,Qct,Ht,Pinft,dFt,dQct,dPinft) = p.sde() F[n:n+Ft.shape[0],n:n+Ft.shape[1]] = Ft L[n:n+Lt.shape[0],nq:nq+Lt.shape[1]] = Lt Qc[nq:nq+Qct.shape[0],nq:nq+Qct.shape[1]] = Qct H[0,n:n+Ht.shape[1]] = Ht Pinf[n:n+Pinft.shape[0],n:n+Pinft.shape[1]] = Pinft + dF[n:n+Ft.shape[0],n:n+Ft.shape[1],nd:nd+dFt.shape[2]] = dFt + dQc[nq:nq+Qct.shape[0],nq:nq+Qct.shape[1],nd:nd+dQct.shape[2]] = dQct + dPinf[n:n+Pinft.shape[0],n:n+Pinft.shape[1],nd:nd+dPinft.shape[2]] = dPinft n += Ft.shape[0] nq += Qct.shape[0] + nd += dFt.shape[2] - return (F,L,Qc,H,Pinf) - #self.parts[0].sde() + return (F,L,Qc,H,Pinf,dF,dQc,dPinf) + + # To test with only one kernel + # return self.parts[0].sde() from GPy.core.model import Model