I have some expressions that are being written to a fortran file and sympy 
is keeping them in a form that involves coefficients that are too large.

For example, here's one of my coefficients:


(6447959512020*c21*r**10 + 89877391198101*c21*r**9 + 482379015493674*c21*r**8 + 
1955782912118958*c21*r**7 + 6144750386733894*c21*r**6 + 
9734633983924239*c21*r**5 + 3581719348056096*c21*r**4 - 
7087617275638458*c21*r**3 - 11332310233710024*c21*r**2 - 6752358207277020*c21*r 
+ 6016737364560*r**10 + 83866633598228*r**9 + 450118807506472*r**8 + 
1562757816049524*r**7 + 3409298852122307*r**6 + 2460129818497007*r**5 - 
3107226702425082*r**4 - 9732722117772259*r**3 + 12534948043759713*r**2 - 
10702947100060800*r + 1022514295602150)/(3387470672547000*r**5 + 
21246968829475350*r**4 + 34890947927234100*r**3 - 11310388190004150*r**2 - 
62103628996695000*r - 33761791036385100)


The problem is if I write it to a file with a simple transformation of 
str(expr.n()) I get something troublesome like 


(6447959512020.0*c21*r**10 + 89877391198101.0*c21*r**9 + 
482379015493674.0*c21*r**8 + 1.95578291211896e+15*c21*r**7 + 
6.14475038673389e+15*c21*r**6 + 9.73463398392424e+15*c21*r**5 + 
3.5817193480561e+15*c21*r**4 - 7.08761727563846e+15*c21*r**3 - 
1.133231023371e+16*c21*r**2 - 6.75235820727702e+15*c21*r + 
6016737364560.0*r**10 + 83866633598228.0*r**9 + 450118807506472.0*r**8 + 
1.56275781604952e+15*r**7 + 3.40929885212231e+15*r**6 + 
2.46012981849701e+15*r**5 - 3.10722670242508e+15*r**4 - 
9.73272211777226e+15*r**3 + 1.25349480437597e+16*r**2 - 1.07029471000608e+16*r 
+ 1.02251429560215e+15)/(3.387470672547e+15*r**5 + 2.12469688294753e+16*r**4 + 
3.48909479272341e+16*r**3 - 1.13103881900042e+16*r**2 - 6.2103628996695e+16*r - 
3.37617910363851e+16)


I also do some regex processing to add the appropriate '_dp' suffix to all the 
numbers.


the problem is that c21 and r are O(1) and they are being multiplied by huge 
numbers and then divided by huge numbers.  I've tried expand and several other 
options but I can't seem to figure out an automatic way to get sympy to give me 
more reasonable double precision coefficients.  I can do it "manually" by 
splitting the expression into the numerator and denominator and then taking the 
large constant and in the denominator and normalizing the numerator with it 
before gluing the expression back together but I'm hoping there's a better way.


Here's what I get if do the splitting manually:


(0.342625169147496617*c21*r**10 + 4.77581416328371673*c21*r**9 + 
25.632169598556608*c21*r**8 + 103.924419784486855*c21*r**7 + 
326.513548464309187*c21*r**6 + 517.269162300637267*c21*r**5 + 
190.321790200281699*c21*r**4 - 376.614658232800258*c21*r**3 - 
602.164871447902571*c21*r**2 - 358.8*c21*r + 0.319711321605773568*r**10 + 
4.45642058838269934*r**9 + 23.9179592041297048*r**8 + 83.0402486340673783*r**7 
+ 181.159883790403722*r**6 + 130.723897012075825*r**5 - 
165.108678569306389*r**4 - 517.167571485358666*r**3 + 666.069426419644693*r**2 
- 568.722408026755853*r + 54.3333333333333333)/((r + 1.0)*(180.0*r**4 + 
949.0*r**3 + 905.0*r**2 - 1506.0*r - 1794.0))


Is there a better way?



-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sympy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/ee10ecaf-bd9f-4b21-98e5-68bdf2640a5b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to