# rotation basis (Skew Symmetric) # E = np.array([[0, -1.], [1., 0]]) # warping basis (Fourier) p = 20 f_basis = np.zeros((TT, p)) for i in range(0, int(p/2)): f_basis[:, 2*i] = 1/np.sqrt(np.pi) * np.sin(2*np.pi*(i+1)*time) f_basis[:, 2*i + 1] = 1/np.sqrt(np.pi) * np.cos(2*np.pi*(i+1)*time) itr = 0 max_val = np.zeros(max_itr+1) while itr <= max_itr: # inner product value A = np.zeros(m) for i in range(0, m): A[i] = fs.innerprod_q2(qtilde, nu[:, :, i]) # form gradient for rotation # B = np.zeros((n, n, m)) # for i in range(0, m): # B[:, :, i] = cf.innerprod_q2(E.dot(qtilde), nu[:, :, i]) * E # tmp1 = np.sum(np.exp(alpha + A)) # tmp2 = np.sum(np.exp(alpha + A) * B, axis=2) # hO = np.sum(y * B, axis=2) - (tmp2 / tmp1) # O_new = O_old.dot(expm(deltaO * hO)) theta = np.arccos(O_old[0, 0]) Ograd = np.array([(-1*np.sin(theta), -1*np.cos(theta)), (np.cos(theta), -1*np.sin(theta))]) B = np.zeros(m)
O = np.eye(n) O_old = O.copy() gam_old = gam.copy() qtilde = q.copy() # warping basis (Fourier) p = 20 f_basis = np.zeros((TT, p)) for i in range(0, int(p/2)): f_basis[:, 2*i] = 1/np.sqrt(np.pi) * np.sin(2*np.pi*(i+1)*time) f_basis[:, 2*i + 1] = 1/np.sqrt(np.pi) * np.cos(2*np.pi*(i+1)*time) itr = 0 max_val = np.zeros(max_itr+1) while itr <= max_itr: # inner product value A = fs.innerprod_q2(qtilde, nu) # form gradient for rotation # B = np.zeros((n, n, m)) # for i in range(0, m): # B[:, :, i] = cf.innerprod_q2(E.dot(qtilde), nu[:, :, i]) * E # tmp1 = np.sum(np.exp(alpha + A)) # tmp2 = np.sum(np.exp(alpha + A) * B, axis=2) # hO = np.sum(y * B, axis=2) - (tmp2 / tmp1) # O_new = O_old.dot(expm(deltaO * hO)) theta = np.arccos(O_old[0, 0]) Ograd = np.array([(-1*np.sin(theta), -1*np.cos(theta)), (np.cos(theta), -1*np.sin(theta))]) B = fs.innerprod_q2(Ograd.dot(qtilde), nu)