chiark / gitweb /
symbolic.py: wip
[moebius3.git] / symbolic.py
1 #!/usr/bin/python
2
3 from sympy import *
4
5 import sys
6
7 import sys, codecs
8 if sys.stdout.encoding is None:
9   sys.stdout = codecs.open("/dev/stdout", "w", 'utf-8')
10
11 init_printing(use_unicode=True)
12
13 r, theta, s, la, mu = symbols('r theta s la mu')
14
15 # start      original formulation
16 # rightvars  replaces 
17
18 p_start = Matrix([
19   r * (1 - cos(theta)),
20   r * sin(theta),
21   mu * s,
22 ])
23
24 p_rightvars = p_start.subs( theta, s/r ).subs( r, 1/la )
25
26 print
27 pprint(p_rightvars)
28
29 p_dirn_rightvars = diff(p_rightvars, s)
30
31 print
32 pprint(p_dirn_rightvars)
33
34 zeta = Wild('zeta')
35
36 p_nosing = (p_rightvars
37             .replace( 1-cos(zeta)  ,   2*sin(zeta/2)**2          )
38             .replace( sin(zeta)**2 ,   zeta*sinc(zeta)*sin(zeta) )
39             )
40 p_nosing[1] = (p_nosing[1]
41             .replace( sin(zeta) , zeta * sinc(zeta)                )
42                )
43
44 print
45 pprint(p_nosing,)
46
47 t = symbols('t')
48
49 q_owncoords = p_nosing.replace(s,t).replace(la,-la)
50 q_dirn_owncoords = p_dirn_rightvars.replace(s,t).replace(la,-la)
51
52 q_dirn_owncoords_0 = q_dirn_owncoords.replace(t,0)
53
54 print
55 pprint(q_owncoords)
56 print
57 pprint(q_dirn_owncoords)
58 print
59 pprint(q_dirn_owncoords_0)
60
61 p2q_translate = p_nosing
62 #p2q_rotate_2d = Matrix([ p_dirn_rightvars[0:2],
63                          
64 p2q_rotate = eye(3)
65 p2q_rotate[0:2, 0] = Matrix([ -p_dirn_rightvars[1], p_dirn_rightvars[0] ])
66 p2q_rotate[0:2, 1] = p_dirn_rightvars[0:2]
67 #p2q_rotate.add_col([0,0])
68 #p2q_rotate.add_row([0,0,1])
69
70 print('\n p2q_rotate\n')
71 pprint(p2q_rotate)
72
73 assert(Eq(p2q_rotate * Matrix([0,1,mu]), p_dirn_rightvars))
74
75 print('\n eye3 subs etc.\n')
76 pprint(Eq(eye(3) * Matrix([1,0,mu]),
77           p_dirn_rightvars .cross(Matrix([0,0,1]) .subs(s,0))))
78
79 print('\n eye3 etc.\n')
80 pprint(Eq(p2q_rotate * Matrix([1,0,mu]),
81           p_dirn_rightvars .cross(Matrix([0,0,1]))))
82
83 #eq = Eq(qmat * q_dirn_owncoords_0, p_dirn_rightvars)
84 #print
85 #pprint(eq)
86 #solve(eq, Q)