Rename *ll* and *ul* to ll and ul in ratfnt
[maxima.git] / share / simplification / rtest_facexp.mac
blobd787d879bdc83e96d413e2c2db7579404505f742
1 (kill(all),load("facexp"),0);
2 0;
4 /* verify that result is expanded wrt e and f, and factored wrt other variables */
6 (exp1:d*e*f^2+c*e*f^2+(-d)*e+c*e+b*c*d+a*c*d, facsum_exp1: facsum(exp1,e,f));
7 (d+c)*e*f^2-(d-c)*e+(b+a)*c*d;
9 is (equal (facsum_exp1, exp1));
10 true;
12 /* verify that result is expanded wrt c and d, and that coefficients of c and d terms are expanded wrt u and v */
14 (exp2:c*d*(x*y*z+w*y*z+u*v^2*z+(-u)*z+u*v^2*y+u*y)+d*e*f^2+c*e*f^2+(-d)*e+c*e+b*c*d, facsum_exp2: facsum(exp2,c,d,[u,v]));
15 c*d*(u*v^2*(z+y)-u*(z-y)+x*y*z+w*y*z+b)+c*e*(f^2+1)+d*e*(f-1)*(f+1);
17 is (equal (facsum_exp2, exp2));
18 true;
20 /* verify that result is same for arguments in a different order */
22 facsum(exp2,[u,v],c,d);
23 c*d*(u*v^2*(z+y)-u*(z-y)+x*y*z+w*y*z+b)+c*e*(f^2+1)+d*e*(f-1)*(f+1);
25 /* verify that result is same for arguments in a different order */
27 facsum(exp2,c,[u],d,[v]);
28 c*d*(u*v^2*(z+y)-u*(z-y)+x*y*z+w*y*z+b)+c*e*(f^2+1)+d*e*(f-1)*(f+1);
30 /* verify result with nested arguments */
32 (exp3:c*d*q*x*y*z+2*c*d*m*p*x*y*z+c*d*m*n*x*y*z+c*d*q*w*y*z+2*c*d*m*p*w*y*z+c*d*m*n*w*y*z+c*d*q*u*v^2*z+2*c*d*m*p*u*v^2*z+c*d*m*n*u*v^2*z
33                  +(-c)*d*q*u*z+(-2)*c*d*m*p*u*z+(-c)*d*m*n*u*z+c*d*u*v^2*y+c*d*u*y+d*e*f^2+c*e*f^2+(-d)*e+c*e+b*c*d,
34  facsum_exp3: facsum(exp3,c,d,[u,v,[z,[m]]]));
35 c*d*(u*v^2*((q+m*(2*p+n))*z+y)+u*((-q-m*(2*p+n))*z+y)+(q*(x+w)+m*(2*p+n)*(x+w))*y*z+b)+c*e*(f^2+1)+d*e*(f-1)*(f+1);
37 is (equal (facsum_exp3, exp3));
38 true;
40 /* verify result with nonatomic argument */
42 (exp4:subst(log(m+n),c,exp2), facsum_exp4: facsum(exp4,log(m+n),[e,f]));
43 log(n+m)*(d*(x*y*z+w*y*z+u*v^2*z-u*z+u*v^2*y+u*y+b)+e*f^2+e)+d*e*f^2-d*e;
45 is (equal (facsum_exp4, exp4));
46 true;
48 (exp5:x+a . b*(c+d)+b . a*(d+c)+log(a*b)*2*(c+d)+log(a/b)*2*(d+c),exp5_factored:factor(exp5));
49 x+2*log(a*b)*d+b . a*d+2*log(a/b)*d+a . b*d+2*log(a*b)*c+b . a*c+2*log(a/b)*c+a . b*c;
51 /* verify result with operator(...) argument */
53 facsum_exp5_factored:facsum(exp5_factored,operator(log,"."));
54 x+2*log(a*b)*(d+c)+b . a*(d+c)+2*log(a/b)*(d+c)+a . b*(d+c);
56 is (equal (facsum_exp5_factored, exp5_factored));
57 true;
59 is(facsum_exp5_factored = exp5);
60 true;
62 facsum(exp5_factored,operator(log),operator("."));
63 x+2*log(a*b)*(d+c)+b . a*(d+c)+2*log(a/b)*(d+c)+a . b*(d+c);
65 (exp6:exp5*2*(e+(h+f)*e . f),exp6_expanded:expand(exp6));
66 2*e . f*h*x+2*e . f*f*x+2*e*x+4*log(a*b)*d*e . f*h+2*b . a*d*e . f*h+4*log(a/b)*d*e . f*h+2*a . b*d*e . f*h+4*log(a*b)*c*e . f*h
67            +2*b . a*c*e . f*h+4*log(a/b)*c*e . f*h+2*a . b*c*e . f*h+4*log(a*b)*d*e . f*f+2*b . a*d*e . f*f+4*log(a/b)*d*e . f*f
68            +2*a . b*d*e . f*f+4*log(a*b)*c*e . f*f+2*b . a*c*e . f*f+4*log(a/b)*c*e . f*f+2*a . b*c*e . f*f+4*log(a*b)*d*e+2*b . a*d*e
69            +4*log(a/b)*d*e+2*a . b*d*e+4*log(a*b)*c*e+2*b . a*c*e+4*log(a/b)*c*e+2*a . b*c*e;
71 /* verify factorfacsum */
73 factorfacsum_exp6_expanded:factorfacsum(exp6_expanded,operator(".",log));
74 2*(e . f*(h+f)+e)*(x+2*log(a*b)*(d+c)+b . a*(d+c)+2*log(a/b)*(d+c)+a . b*(d+c));
76 is(factorfacsum_exp6_expanded = exp6);
77 true;
79 /* verify facsum with nextlayerfactor */
81 (exp7:f*h+f*g+(-2)*c*d*f^2+2*c*d*e^2,ev(facsum(exp7,c,[e]),nextlayerfactor:true));
82 f*(h+g)-2*c*d*(f-e)*(f+e);
84 facsum(exp7,c,[e]);
85 f*(h+g)+c*(2*d*e^2-2*d*f^2);
87 facsum(exp7,c,'nextlayerfactor,[e]);
88 f*(h+g)-2*c*d*(f-e)*(f+e);
90 (exp8:-2*c*d*f^2*h^2*l^2+f*h^2*l^2+(-4)*c*d*f^2*h^2*k*l+2*f*h^2*k*l+(-4)*c*d*f^2*g*h*l+2*f*g*h*l+(-2)*c*d*f^2*h^2*k^2+f*h^2*k^2
91                         +(-4)*c*d*f^2*g*h*k+2*f*g*h*k+(-2)*c*d*f^2*g^2+f*g^2+2*c*d*e^2,facsum(exp8,c,'nextlayerfactor,[f]));
92 f*(h*l+h*k+g)^2-2*c*d*(f*(h*l+h*k+g)-e)*(f*(h*l+h*k+g)+e);
94 facsum(exp8,c,[f,'nextlayerfactor]);
95 c*(2*d*e^2-2*d*f^2*(h*l+h*k+g)^2)+f*(h*l+h*k+g)^2;
97 (exp1/(c*(e+f)+d*e),facsum(exp1/(c*(e+f)+d*e),e,f,[c,d]));
98 ((d+c)*e*f^2+(c-d)*e+(b+a)*c*d)/(c*f+(d+c)*e);
100 /* verify facsum with facsum_combine */
102 ev(facsum(exp1/(c*(e+f)+d*e),e,f,[c,d]),facsum_combine:false);
103 ((d+c)*e*f^2)/(c*f+(d+c)*e)+((c-d)*e)/(c*f+(d+c)*e)+((b+a)*c*d)/(c*f+(d+c)*e);
105 /* verify facsum with "automatic" property */
107 get('facsum,'automatic);
108 nonumfactor;
110 put('facsum,'sqfr,'automatic);
111 sqfr;
113 facsum(exp2,c,d,[u,v]);
114 c*d*(u*v^2*(z+y)-u*(z-y)+(x+w)*y*z+b)+c*e*(f^2+1)+d*e*(f^2-1);
116 (declare(sqfr,noun),facsum(exp2,c,d,[u,v]));
117 c*d*(sqfr(sqfr(sqfr((x+w)*y*z)+sqfr(b)+sqfr(0)))+u*v^2*sqfr(z+y)+u*sqfr(sqfr(sqfr(sqfr(-z)+sqfr(y)))))
118  +c*sqfr(sqfr(sqfr(e*f^2+e)))+d*sqfr(e*f^2-e);
120 put('facsum,'nonumfactor,'automatic);
121 nonumfactor;
123 /* verify collectterms */
125 (exp9:a*u+b,exp10:c*u+d,collectterms(exp9+exp10,u));
126 (c+a)*u+d+b;
128 (e*u^2+f/u+b+d,exp11:expand(%%+exp10*u),collectterms(exp11,u));
129 (e+c)*u^2+d*u+f/u+d+b;
131 (u^2*v+exp11+subst(v,u,exp11),collectterms(%%,u,v));
132 (e+c)*v^2+u^2*v+d*v+f/v+(e+c)*u^2+d*u+f/u+2*d+2*b;
134 collectterms(exp2,c,d,[u,v]);
135 c*d*(u*v^2*(z+y)+x*y*z+w*y*z+u*(y-z)+b)+c*(e*f^2+e)+d*(e*f^2-e);
137 collectterms(exp5_factored,operator(log,"."));
138 x+log(a*b)*(2*d+2*c)+log(a/b)*(2*d+2*c)+b . a*(d+c)+a . b*(d+c);
140 /* SF bug #4118: facsum + operator(".") + dotdistrib:true + GCL = FAIL */
142 block ([dotdistrib: true],
143        facsum(l1 . sum(bra(n+1) . a . ket(n) . l2, n, 1, 64), [l1,l2], operator(".")));
144 l1 . bra(65) . a . ket(64) . l2+l1 . bra(64) . a . ket(63) . l2+l1 . bra(63) . a . ket(62) . l2+l1 . bra(62) . a . ket(61) . l2
145                                +l1 . bra(61) . a . ket(60) . l2+l1 . bra(60) . a . ket(59) . l2+l1 . bra(59) . a . ket(58) . l2
146                                +l1 . bra(58) . a . ket(57) . l2+l1 . bra(57) . a . ket(56) . l2+l1 . bra(56) . a . ket(55) . l2
147                                +l1 . bra(55) . a . ket(54) . l2+l1 . bra(54) . a . ket(53) . l2+l1 . bra(53) . a . ket(52) . l2
148                                +l1 . bra(52) . a . ket(51) . l2+l1 . bra(51) . a . ket(50) . l2+l1 . bra(50) . a . ket(49) . l2
149                                +l1 . bra(49) . a . ket(48) . l2+l1 . bra(48) . a . ket(47) . l2+l1 . bra(47) . a . ket(46) . l2
150                                +l1 . bra(46) . a . ket(45) . l2+l1 . bra(45) . a . ket(44) . l2+l1 . bra(44) . a . ket(43) . l2
151                                +l1 . bra(43) . a . ket(42) . l2+l1 . bra(42) . a . ket(41) . l2+l1 . bra(41) . a . ket(40) . l2
152                                +l1 . bra(40) . a . ket(39) . l2+l1 . bra(39) . a . ket(38) . l2+l1 . bra(38) . a . ket(37) . l2
153                                +l1 . bra(37) . a . ket(36) . l2+l1 . bra(36) . a . ket(35) . l2+l1 . bra(35) . a . ket(34) . l2
154                                +l1 . bra(34) . a . ket(33) . l2+l1 . bra(33) . a . ket(32) . l2+l1 . bra(32) . a . ket(31) . l2
155                                +l1 . bra(31) . a . ket(30) . l2+l1 . bra(30) . a . ket(29) . l2+l1 . bra(29) . a . ket(28) . l2
156                                +l1 . bra(28) . a . ket(27) . l2+l1 . bra(27) . a . ket(26) . l2+l1 . bra(26) . a . ket(25) . l2
157                                +l1 . bra(25) . a . ket(24) . l2+l1 . bra(24) . a . ket(23) . l2+l1 . bra(23) . a . ket(22) . l2
158                                +l1 . bra(22) . a . ket(21) . l2+l1 . bra(21) . a . ket(20) . l2+l1 . bra(20) . a . ket(19) . l2
159                                +l1 . bra(19) . a . ket(18) . l2+l1 . bra(18) . a . ket(17) . l2+l1 . bra(17) . a . ket(16) . l2
160                                +l1 . bra(16) . a . ket(15) . l2+l1 . bra(15) . a . ket(14) . l2+l1 . bra(14) . a . ket(13) . l2
161                                +l1 . bra(13) . a . ket(12) . l2+l1 . bra(12) . a . ket(11) . l2+l1 . bra(11) . a . ket(10) . l2
162                                +l1 . bra(10) . a . ket(9) . l2+l1 . bra(9) . a . ket(8) . l2+l1 . bra(8) . a . ket(7) . l2
163                                +l1 . bra(7) . a . ket(6) . l2+l1 . bra(6) . a . ket(5) . l2+l1 . bra(5) . a . ket(4) . l2
164                                +l1 . bra(4) . a . ket(3) . l2+l1 . bra(3) . a . ket(2) . l2+l1 . bra(2) . a . ket(1) . l2;