def test(a,b): g = (vsr.CGA(vsr.Mot(0,1,0,0,0,0,0,0)).comm(vsr.CGA(a)) * vsr.CGA(b) * 2.0)[0] h = (a[1]* b[0] - a[0] * b[1]) * 2 print(h) print(g) i = (-a[0] * b[0] - a[1] * b[1] ) * 4.0 j = (vsr.CGA(vsr.Mot(0,1,0,0,0,0,0,0)).comm(vsr.CGA(vsr.Mot(0,1,0,0,0,0,0,0)).comm(vsr.CGA(a))) * vsr.CGA(b) * 4.0)[0] print(i) print(j)
def project(Y, M): YM2 = Y * M YM2[0] = 0.0 YM2[26] = 0.0 YM2[27] = 0.0 YM2[28] = 0.0 YM2[29] = 0.0 YM2[30] = 0.0 return vsr.CGA(vsr.MotRec(YM2 * M.rev()))
def cga_gp_tensor(): dim = 32 M = np.zeros((dim, dim)) mask = np.arange(1, dim + 1) for i in range(dim): for j in range(dim): a = vsr.CGA(*[0] * 32) b = vsr.CGA(*[0] * 32) a[i] = 1. b[j] = 1. M[i, j] = np.dot(mask, np.array(a * b)) tensor = np.zeros((dim, dim, dim)) for k in range(dim): for i in range(dim): for j in range(dim): val = M[i, j] if abs(val) == k + 1: tensor[k, i, j] = np.sign(val) return tensor
a[i] = 1. b[j] = 1. # print(a * b) M[i, j] = np.dot(mask, np.array(a * b)) tensor = np.zeros((dim, dim, dim)) for k in range(dim): for i in range(dim): for j in range(dim): val = M[i, j] if abs(val) == k + 1: tensor[k, i, j] = np.sign(val) return tensor Gkij = cga_gp_tensor() a = vsr.CGA(*np.arange(1, 33)) * 0.1 b = vsr.CGA(*np.arange(1, 33)) * 0.1 # print(a * b) # print(vsr.CGA(*np.einsum('i,j,kij->k', a, b, Gkij))) Gkij = ega_gp_tensor() for i in range(8): a = vsr.EGA(*np.arange(1, 9)) b = vsr.EGA(*[0] * 8) b[i] = 1.0 c = a * b d = vsr.EGA(*np.einsum('i,j,kij->k', a, b, Gkij)) print(c) print(d) Gkij = cga_gp_tensor()
def main1(): motor0 = create_motor() motor = create_motor() points = create_points(motor) A, B, _ = points[0] dM = vsr.CGA(A) * vsr.CGA(motor0).rev() * vsr.CGA(B) + \ vsr.CGA(A).rev() * vsr.CGA(motor0).rev() * vsr.CGA(B).rev() # print(vsr.CGA(motor0)) proj = project(dM, vsr.CGA(motor0)) print(proj) dM2 = vsr.CGA(motor0).rev() * vsr.CGA(A).spin(vsr.CGA(motor0)) * vsr.CGA(B) * 2.0 print(project(dM2, vsr.CGA(motor0)))
def err(points, mot): err = 0.0 for A, B, _ in points: err += (vsr.CGA(A.spin(mot)) * vsr.CGA(B) * -2.0)[0] return err