result_dirnscaled = q_sqparm.col_join(q_dirn_dirnscaled)
dbg('result_dirnscaled')
-for sm_sh in ((), (sh*sh*la,)):
- for sm_th in ((), (th*th*la,)):
- smalls = sm_sh + sm_th
- result_fordiff = result_dirnscaled
- for small in smalls:
- result_fordiff = result_fordiff.replace(
- sinc(small),
- 1 - small*small/factorial(3) - small**4/factorial(5)
- )
- print(smalls)
- dbg('result_fordiff');
- for v in 'sh','th','la','mu','gamma','kappa':
- dbg('diff(result_fordiff,%s)' % v)
- d = diff(result_fordiff,eval(v))
+params = ('sh','th','la','mu','gamma','kappa')
+
+def gen_diff(current, smalls):
+ if not smalls:
+ for param in params:
+ global d
+ paramv = eval(param)
+ d = diff(current, paramv)
+ dbg('d')
print(ccode(d, assign_to='FOO'))
(defs, v) = cse(d, symbols=map((lambda i: symbols('tmp%d' % i)),
itertools.count()))
for vn, val in defs:
print(ccode(val, assign_to=vn))
print(ccode(v[0], assign_to='BAR'))
+ else:
+ small = smalls[0]
+ smalls = smalls[1:]
+ print('if ',small,' nonsmall {')
+ gen_diff(current, smalls)
+ print('} else { /* %s small */' % small)
+ gen_diff(current.replace(
+ sinc(small),
+ 1 - small*small/factorial(3) - small**4/factorial(5),
+ ),
+ smalls
+ )
+ print('} /* %s small */' % small)
+
+gen_diff(result_dirnscaled, (sh*sh*la, th*th*la))
#bad = q_orgcoords[0]
#badd = diff(bad, la)