8 if sys.stdout.encoding is None:
9 sys.stdout = codecs.open("/dev/stdout", "w", 'utf-8')
11 init_printing(use_unicode=True, num_columns=280)
13 r, theta, s, la, mu, kappa = symbols('r theta s lambda mu kappa')
15 # start original formulation
24 p_rightvars = p_start.subs( theta, s/r ).subs( r, 1/la )
28 print('\n ' + vn + '\n')
35 p_dirn_rightvars = diff(p_rightvars, s)
37 dbg('p_dirn_rightvars')
41 p_nosing = (p_rightvars
42 .replace( 1-cos(zeta) , 2*sin(zeta/2)**2 )
43 .replace( sin(zeta)**2 , zeta*sinc(zeta)*sin(zeta) )
45 p_nosing[1] = (p_nosing[1]
46 .replace( sin(zeta) , zeta * sinc(zeta) )
53 q_owncoords = p_nosing.replace(s,t).replace(la,-la)
54 q_dirn_owncoords = p_dirn_rightvars.replace(s,t).replace(la,-la)
56 dbg('q_owncoords','q_dirn_owncoords')
57 dbg('q_owncoords.replace(t,0)','q_dirn_owncoords.replace(t,0)')
59 p2q_translate = p_nosing
60 #p2q_rotate_2d = Matrix([ p_dirn_rightvars[0:2],
63 #p2q_rotate[0:2, 0] = Matrix([ p_dirn_rightvars[1], -p_dirn_rightvars[0] ])
64 #p2q_rotate[0:2, 1] = p_dirn_rightvars[0:2]
66 p2q_rotate = Matrix([[ cos(theta), sin(theta), 0 ],
67 [ -sin(theta), cos(theta), 0 ],
68 [ 0 , 0, 1 ]]).subs(theta,la*s)
69 #p2q_rotate.add_col([0,0])
70 #p2q_rotate.add_row([0,0,1])
74 q_dirn_maincoords = p2q_rotate * q_dirn_owncoords;
75 q_maincoords = p2q_rotate * q_owncoords + p2q_translate
77 dbg('diff(p_dirn_rightvars,s)')
78 dbg('diff(q_dirn_maincoords,t)')
79 dbg('diff(q_dirn_maincoords,t).replace(t,0)')
81 assert(Eq(p2q_rotate * Matrix([0,1,mu]), p_dirn_rightvars))
83 #for v in 's','t','la','mu':
84 # dbg('diff(q_maincoords,%s)' % v)
86 #print('\n eye3 subs etc.\n')
87 #dbg('''Eq(eye(3) * Matrix([1,0,mu]),
88 # p_dirn_rightvars .cross(Matrix([0,0,1]) .subs(s,0)))''')
90 #dbg('''Eq(p2q_rotate * Matrix([1,0,mu]),
91 # p_dirn_rightvars .cross(Matrix([0,0,1])))''')
93 #eq = Eq(qmat * q_dirn_owncoords_0, p_dirn_rightvars)
98 dbg('q_maincoords.replace(t,0)','q_dirn_maincoords.replace(t,0)')
100 dbg('q_maincoords','q_dirn_maincoords')
102 sinof_mu = sin(atan(mu))
103 cosof_mu = cos(atan(mu))
105 dbg('cosof_mu','sinof_mu')
107 o2p_rotate1 = Matrix([[ 1, 0, 0 ],
108 [ 0, cosof_mu, +sinof_mu ],
109 [ 0, -sinof_mu, cosof_mu ]])
111 check_dirn_p_s0 = o2p_rotate1 * p_dirn_rightvars.replace(s,0)
112 check_dirn_p_s0.simplify()
113 dbg('check_dirn_p_s0')
115 o2p_rotate2 = Matrix([[ cos(kappa), 0, -sin(kappa) ],
117 [ +sin(kappa), 0, cos(kappa) ]])
119 p_dirn_orgcoords = o2p_rotate2 * o2p_rotate1 * p_dirn_rightvars
121 check_dirn_p_s0 = p_dirn_orgcoords.replace(s,0)
122 check_dirn_p_s0.simplify()
123 dbg('check_dirn_p_s0')
125 check_accel_p_s0 = diff(p_dirn_orgcoords,s).replace(s,0)
126 check_accel_p_s0.simplify()
127 dbg('check_accel_p_s0')
129 q_dirn_orgcoords = o2p_rotate2 * o2p_rotate1 * q_dirn_maincoords;
130 q_orgcoords = o2p_rotate2 * o2p_rotate1 * q_maincoords;
131 dbg('q_orgcoords','q_dirn_orgcoords')
133 sh, th = symbols('alpha beta')
135 q_dirn_sqparm = q_dirn_orgcoords.replace(s, sh**2).replace(t, th**2)
136 q_sqparm = q_orgcoords .replace(s, sh**2).replace(t, th**2)
138 print '----------------------------------------'
139 dbg('q_sqparm', 'q_dirn_sqparm')
140 print '----------------------------------------'
141 for v in 'sh','th','la','mu':
142 dbg('diff(q_sqparm,%s)' % v)
143 dbg('diff(q_dirn_sqparm,%s)' % v)
144 print '----------------------------------------'
146 gamma = symbols('gamma')
148 q_dirn_dirnscaled = q_dirn_sqparm * gamma
150 result_dirnscaled = q_sqparm.col_join(q_dirn_dirnscaled)
151 dbg('result_dirnscaled')
153 for sm_sh in ((), (sh*sh*la,)):
154 for sm_th in ((), (th*th*la,)):
155 smalls = sm_sh + sm_th
156 result_fordiff = result_dirnscaled
158 result_fordiff = result_fordiff.replace(
160 1 - small*small/factorial(3) - small**4/factorial(5)
163 dbg('result_fordiff');
165 #bad = q_orgcoords[0]
166 #badd = diff(bad, la)