Exemple #1
0
 def backward(ctx, dval, dvec):
     eigval = ctx.eigval
     eigvec = ctx.eigvec
     n = len(eigval)
     eigval_dist = eigval[:, None] - eigval[None, :]
     idx = _arange(n).long().tolist()
     eigval_dist[idx, idx] = 1.0
     dval_out = eigvec[:, None, :] * eigvec[None, :, :]
     dvec_out = _zeros(n, n, n, n).type(eigval.type())
     omega = _zeros(n, n).type(eigval.type())
     for i in range(n):
         for j in range(n):
             omega[:, :] = eigvec[i, :, None] * eigvec[j, None, :]
             omega[idx, idx] = 0.0
             omega.div_(eigval_dist)
             dvec_out[i, j, :, :] = -_mm(eigvec, omega)
     dval = _sum(dval[None, None, :] * dval_out, -1)
     dvec = _sum(_sum(dvec[None, None, :, :] * dvec_out, -1), -1)
     return dval + dvec
Exemple #2
0
def get_koopman_matrix(x, y):
    ixx = sqrtinv(covar(x, x))
    iyy = sqrtinv(covar(y, y))
    cxy = covar(x, y)
    kmm = _mm(ixx, _mm(cxy, iyy))
    return kmm.t()
Exemple #3
0
def sqrtinv(matrix):
    eigval, eigvec = DecomposeRSPDMatrix.apply(matrix)
    diag = _diag(1.0 / _sqrt(eigval))
    return _mm(eigvec, _mm(diag, eigvec.t()))
Exemple #4
0
def covar(x, y):
    return _mm(x.t(), y).div_(len(x))