Artifact 38bb8897b0ac202a10ae023f8f48032f9a9c8e2a401c3a6ff64dfe140ffc29cb:
- Executable file
r38/packages/scope/scope.rlg
— part of check-in
[f2fda60abd]
at
2011-09-02 18:13:33
on branch master
— Some historical releases purely for archival purposes
git-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/trunk/historical@1375 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: arthurcnorman@users.sourceforge.net, size: 17184) [annotate] [blame] [check-ins using] [more...]
Tue Feb 10 12:28:24 2004 run on Linux % Test SCOPE Package. % ================== % NOTE: The SCOPE, GHORNER, GSTRUCTR and GENTRAN packages must be loaded % to run these tests. % Further reading: SCOPE 1.5 manual Section 3, example 1; scope_switches$ ON : evallhseqp exp ftch nat period OFF : acinfo again double fort gentranopt inputc intern prefix priall primat roundbf rounded sidrel vectorc % Further reading: SCOPE 1.5 manual Section 3.1, examples 2,3,4 and 5. on priall$ optimize z:=a^2*b^2+10*a^2*m^6+a^2*m^2+2*a*b*m^4+2*b^2*m^6+b^2*m^2 iname s; 2 2 2 6 2 2 4 2 6 2 2 z := a *b + 10*a *m + a *m + 2*a*b*m + 2*b *m + b *m Sumscheme : || EC|Far ------------ 0|| 1| z ------------ Productscheme : | 0 1 2| EC|Far --------------------- 1| 2 2| 1| 0 2| 6 2| 10| 0 3| 2 2| 1| 0 4| 4 1 1| 2| 0 5| 6 2 | 2| 0 6| 2 2 | 1| 0 --------------------- 0 : m 1 : b 2 : a Number of operations in the input is: Number of (+/-) operations : 5 Number of unary - operations : 0 Number of * operations : 10 Number of integer ^ operations : 11 Number of / operations : 0 Number of function applications : 0 s0 := b*a s4 := m*m s1 := s4*b*b s2 := s4*a*a s3 := s4*s4 z := s1 + s2 + s0*(2*s3 + s0) + s3*(2*s1 + 10*s2) Number of operations after optimization is: Number of (+/-) operations : 5 Number of unary - operations : 0 Number of * operations : 12 Number of integer ^ operations : 0 Number of / operations : 0 Number of function applications : 0 Sumscheme : | 0 3 4 5| EC|Far ------------------------ 0| 1 1| 1| z 15| 2 10| 1| 14 17| 2 1 | 1| 16 ------------------------ 0 : s3 3 : s0 4 : s1 5 : s2 Productscheme : | 8 9 10 11 17 18 19 20| EC|Far ------------------------------------ 7| 1 1| 1| s0 8| 1 2 | 1| s1 9| 1 2| 1| s2 10| 2 | 1| s3 11| 2 | 1| s4 14| 1 | 1| 0 16| 1 | 1| 0 ------------------------------------ 8 : s4 9 : s3 10 : s2 11 : s1 17 : s0 18 : m 19 : b 20 : a off priall$ on primat,acinfo$ optimize ghorner <<z:=a^2*b^2+10*a^2*m^6+a^2*m^2+2*a*b*m^4+2*b^2*m^6+b^2*m^2>> vorder m iname s; Sumscheme : || EC|Far ------------ 0|| 1| z 3|| 1| 2 7|| 1| 6 10|| 1| 9 ------------ Productscheme : | 0 1 2| EC|Far --------------------- 1| 2 2| 1| 0 2| 2 | 1| 0 4| 2| 1| 3 5| 2 | 1| 3 6| 2 | 1| 3 8| 1 1| 2| 7 9| 2 | 1| 7 11| 2| 10| 10 12| 2 | 2| 10 --------------------- 0 : m 1 : b 2 : a Number of operations in the input is: Number of (+/-) operations : 5 Number of unary - operations : 0 Number of * operations : 8 Number of integer ^ operations : 9 Number of / operations : 0 Number of function applications : 0 s0 := b*a s1 := b*b s2 := a*a s3 := m*m z := s0*s0 + s3*(s1 + s2 + s3*(2*s0 + s3*(2*s1 + 10*s2))) Number of operations after optimization is: Number of (+/-) operations : 5 Number of unary - operations : 0 Number of * operations : 11 Number of integer ^ operations : 0 Number of / operations : 0 Number of function applications : 0 Sumscheme : | 0 1 2| EC|Far --------------------- 0| | 1| z 3| 1 1| 1| 2 7| 2 | 1| 6 10| 2 10| 1| 9 --------------------- 0 : s0 1 : s1 2 : s2 Productscheme : | 3 4 5 9 10 11 12| EC|Far --------------------------------- 1| 2 | 1| 0 2| 1 | 1| 0 6| 1 | 1| 3 9| 1 | 1| 7 13| 1 1| 1| s0 14| 2 | 1| s1 15| 2| 1| s2 16| 2 | 1| s3 --------------------------------- 3 : s3 4 : s2 5 : s1 9 : s0 10 : m 11 : b 12 : a off exp,primat,acinfo$ q:=a+b$ r:=q+a+b$ optimize x:=a+b,q:=:q^2,p(q)::=:r iname s; x := a + b q := x*x p(x) := 2*x on exp$ clear q,r$ % A similar example follows. % operator a$% Not necessary. Some differences between REDUCE 3.5 and REDUCE 3.6 % when dealing with indices. on inputc$ k:=j:=1$ u:=c*x+d$ v:=sin(u)$ optimize {a(k,j):=v*(v^2*cos(u)^2+u), a(k,j)::=:v*(v^2*cos(u)^2+u)} iname s; 2 2 a(1,1) := v*(v *cos(u) + u) 2 3 a(1,1) := cos(c*x + d) *sin(c*x + d) + sin(c*x + d)*c*x + sin(c*x + d)*d s9 := cos(u)*v a(1,1) := v*(u + s9*s9) s6 := x*c + d s5 := sin(s6) s10 := s5*cos(s6) a(1,1) := s5*(s6 + s10*s10) off exp$ optimize {a(k,j):=v*(v^2*cos(u)^2+u), a(k,j)::=:v*(v^2*cos(u)^2+u)} iname s; 2 2 a(1,1) := v*(v *cos(u) + u) 2 2 a(1,1) := (c*x + d + cos(c*x + d) *sin(c*x + d) )*sin(c*x + d) s9 := cos(u)*v a(1,1) := v*(u + s9*s9) s6 := x*c + d s5 := sin(s6) s10 := s5*cos(s6) a(1,1) := s5*(s6 + s10*s10) off inputc,period$ optlang fortran$ optimize z:=(6*a+18*b+9*c+3*d+6*j+18*f+6*g+5*h+5*k+3)^13 iname s; s0=5*(h+k)+3*(3*c+d+1+6*(b+f)+2*(a+j+g)) s3=s0*s0*s0 s2=s3*s3 z=s0*s2*s2 off ftch$ optimize z:=(6*a+18*b+9*c+3*d+6*j+18*f+6*g+5*h+5*k+3)^13 iname s; z=(5*(h+k)+3*(3*c+d+1+6*(b+f)+2*(a+j+g)))**13 optlang c$ optimize z:=(6*a+18*b+9*c+3*d+6*j+18*f+6*g+5*h+5*k+3)^13 iname s; { s0=5*(h+k)+3*(3*c+d+1+6*(b+f)+2*(a+j+g)); s3=s0*s0*s0; s2=s3*s3; z=s0*s2*s2; } % Note: C code never contains exponentiations. on ftch$ optimize {x:=3*a*p,y:=3*a*q,z:=6*a*r+2*b*p,u:=6*a*d+2*b*q, v:=9*a*c+4*b*d,w:=4*b} iname s; { s2=3*a; x=s2*p; y=s2*q; s0=2*b; s3=6*a; z=s0*p+s3*r; u=s0*q+s3*d; w=4*b; v=w*d+9*c*a; } off ftch$ optlang fortran$ optimize {x:=3*a*p,y:=3*a*q,z:=6*a*r+2*b*p,u:=6*a*d+2*b*q, v:=9*a*c+4*b*d,w:=4*b} iname s; x=3*p*a y=3*q*a z=2*b*p+6*r*a u=2*b*q+6*d*a v=4*d*b+9*c*a w=4*b on ftch$ setlength 2$ optimize {x:=3*a*p,y:=3*a*q,z:=6*a*r+2*b*p,u:=6*a*d+2*b*q, v:=9*a*c+4*b*d,w:=4*b} iname s; x=3*p*a y=3*q*a z=2*b*p+6*r*a u=2*b*q+6*d*a v=4*d*b+9*c*a w=4*b resetlength$ optlang nil$ % Further reading: SCOPE 1.5 manual section 3.1, example 9 and section 3.2. u:=a*x+2*b$ v:=sin(u)$ w:=cos(u)$ f:=v^2*w; 2 f := cos(a*x + 2*b)*sin(a*x + 2*b) off exp$ optimize f:=:f,g:=:f^2+f iname s$ s3 := x*a + 2*b s2 := sin(s3) f := s2*s2*cos(s3) g := f*(f + 1) alst:=aresults; alst := {s3=a*x + 2*b, s2=sin(s3), 2 f=cos(s3)*s2 , g=(f + 1)*f} restorables; {f} f; f arestore f; f; 2 cos(a*x + 2*b)*sin(a*x + 2*b) alst; {s3=a*x + 2*b, s2=sin(s3), 2 2 cos(a*x + 2*b)*sin(a*x + 2*b) =cos(s3)*s2 , 2 2 g=(cos(a*x + 2*b)*sin(a*x + 2*b) + 1)*cos(a*x + 2*b)*sin(a*x + 2*b) } optimize f:=:f,g:=:f^2+f iname s$ s3 := x*a + 2*b s2 := sin(s3) f := s2*s2*cos(s3) g := f*(f + 1) alst:=aresults$ optimize f:=:f,g:=:f^2+f iname s$ g := f*(f + 1) restoreall$ f; f % Further reading: SCOPE 1.5 manual section 3.1, example 8. % See also section 5. % Also recommended: section 9. clear a$ matrix a(2,2)$ a(1,1):=x+y+z$ a(1,2):=x*y$ a(2,1):=(x+y)*x*y$ a(2,2):=(x+2*y+3)^3-x$ on exp$ off fort,nat$ optimize detexp:=:det(a) out "expfile" iname s$ off exp$ optimize detnexp:=:det(a) out "nexpfile" iname t$ in expfile$ in nexpfile$ on nat$ detexp-detnexp; 0 system "rm expfile nexpfile"$ % Further reading: SCOPE 1.5 manual section 4.2, example 15. % Although the output is similar, it is in general equivalent and % not identical when using REDUCE 3.6 in stead of REDUCE 3.5. This % is due to improvements in the simplification strategy. on acinfo$ optimize gstructr<<a;aa:=(x+y)^2;b:=(x+y)*(y+z);c:=(x+2*y)*(y+z)*(z+x)^2>> name v iname s; Number of operations in the input is: Number of (+/-) operations : 8 Number of unary - operations : 0 Number of * operations : 8 Number of integer ^ operations : 3 Number of / operations : 0 Number of function applications : 0 v1 := y + z a(1,1) := v1 + x a(1,2) := y*x v3 := y + x a(2,1) := a(1,2)*v3 s6 := 2*y + x s4 := s6 + 3 a(2,2) := s4*s4*s4 - x aa := v3*v3 b := v1*v3 s5 := z + x c := s6*s5*s5*v1 Number of operations after optimization is: Number of (+/-) operations : 7 Number of unary - operations : 0 Number of * operations : 10 Number of integer ^ operations : 0 Number of / operations : 0 Number of function applications : 5 alst:= algopt(algstructr({a,b=(x+y)^2,c=(x+y)*(y+z),d=(x+2*y)*(y+z)*(z+x)^2},v),s); Number of operations in the input is: Number of (+/-) operations : 8 Number of unary - operations : 0 Number of * operations : 8 Number of integer ^ operations : 3 Number of / operations : 0 Number of function applications : 0 Number of operations after optimization is: Number of (+/-) operations : 7 Number of unary - operations : 0 Number of * operations : 10 Number of integer ^ operations : 0 Number of / operations : 0 Number of function applications : 5 *** a declared operator alst := {v1=y + z, a(1,1)=v1 + x, a(1,2)=x*y, v3=x + y, a(2,1)=a(1,2)*v3, s6=x + 2*y, s4=s6 + 3, 3 a(2,2)=s4 - x, 2 b=v3 , c=v1*v3, s5=x + z, 2 d=s5 *s6*v1} off acinfo$ % Further reading: SCOPE 1.5 manual section 4.3, example 16. clear a$ procedure taylor(fx,x,x0,n); sub(x=x0,fx)+(for k:=1:n sum(sub(x=x0,df(fx,x,k))*(x-x0)^k/factorial(k)))$ hlst:={f1=taylor(e^x,x,0,4),f2=taylor(cos x,x,0,6)}$ on rounded$ hlst:=hlst; 3 2 hlst := {f1=0.0416666666667*(x + 4*x + 12*x + 24)*x + 1, 4 2 2 f2= - 0.00138888888889*(x - 30*x + 360)*x + 1} optimize alghorner(hlst,{x}) iname g$ g1 := x*x g0 := g1*x f1 := 1 + x*(0.166666666667*g1 + 0.0416666666667*g0 + 1 + 0.5*x) f2 := 1 + g1*(0.0416666666667*g1 - 0.5 - 0.00138888888889*g0*x) off rounded$ % Further reading: SCOPE 1.5 manual section 3.1, examples 6 and 7. optimize z:=:for j:=2:6 sum a^(1/j) iname s$ 1/60 s0 := a s8 := s0*s0 s7 := s8*s0 s5 := s8*s7 s3 := s5*s5 s2 := s8*s3 s1 := s7*s2 s4 := s5*s1 z := s3 + s2 + s1 + s4 + s4*s3 optimize z1:=a+sqrt(sin(a^2+b^2)), z2:=b+sqrt(sin(a^2+b^2)), z3:=a+b+(a^2+b^2)^(1/2), z4:=sqroot(a^2+b^2)+(a^2+b^2)^3, z5:=a^2+b^2+cos(a^2+b^2), z6:=(a^2+b^2)^(1/3)+(a^2+b^2)^(1/6) iname s; s6 := b*b + a*a s8 := sqrt(sin(s6)) z1 := s8 + a z2 := s8 + b 1/6 s7 := s6 s9 := s7*s7 z3 := a + b + s9*s7 z4 := sqroot(s6) + s6*s6*s6 z5 := s6 + cos(s6) z6 := s7 + s9 % Further reading: SCOPE 1.5 manual section 6, examples 18 and 19. optlang fortran$ optimize {x(i+1,i-1):=a(i+1,i-1)+b(i),y(i-1):=a(i-1,i+1)-b(i)} iname s declare <<x(4),a(4,4),y(5):real;b(5):integer>>; integer b(5),i,s10,s9 real a(4,4),x(4),y(5) s10=i+1 s9=i-1 x(s10,s9)=a(s10,s9)+b(i) y(s9)=a(s9,s10)-b(i) optlang c$ optimize {x(i+1,i-1):=a(i+1,i-1)+b(i),y(i-1):=a(i-1,i+1)-b(i)} iname s declare <<x(4),a(4,4),y(5):real;b(5):integer>>; int b[6],i,s10,s9; float a[5][5],x[5],y[6]; { s10=i+1; s9=i-1; x[s10][s9]=a[s10][s9]+b[i]; y[s9]=a[s9][s10]-b[i]; } optlang pascal$ optimize {x(i+1,i-1):=a(i+1,i-1)+b(i),y(i-1):=a(i-1,i+1)-b(i)} iname s declare <<x(4),a(4,4),y(5):real;b(5):integer>>; var s9,s10,i: integer; b: array[0..5] of integer; y: array[0..5] of real; x: array[0..4] of real; a: array[0..4,0..4] of real; begin s10:=i+1; s9:=i-1; x[s10,s9]:=a[s10,s9]+b[i]; y[s9]:=a[s9,s10]-b[i] end; optlang ratfor$ optimize {x(i+1,i-1):=a(i+1,i-1)+b(i),y(i-1):=a(i-1,i+1)-b(i)} iname s declare <<x(4),a(4,4),y(5):real;b(5):integer>>; integer b(5),i,s10,s9 real a(4,4),x(4),y(5) { s10=i+1 s9=i-1 x(s10,s9)=a(s10,s9)+b(i) y(s9)=a(s9,s10)-b(i) } precision 7$ on rounded, double$ optlang fortran$ optimize x1:=2 *a + 10 *b, x2:=2.00001 *a + 10 *b, x3:=2 *a + 10.00001 *b, x4:=6 *a + 10 *b, x5:=2.0000001 *a + 10.000001 *b iname s declare << x1,x2,x3,x4,x5,a,b:real>>$ double precision a,b,s1,s2,x1,x2,x3,x4,x5 s1=2*a s2=10*b x1=s2+s1 x2=s2+2.00001d0*a x3=s1+1.000001d1*b x4=s2+6*a x5=x1 % Further reading: SCOPE 1.5 manual section 7, example 20. % Notice the double role of e: In the lhs as identifier. In the rhs as % exponential function. % Further notice that a is expected to be declared operator. This is % due to lower level scope activities. optimize a(1,x+1) := g + h*r^f, b(y+1) := a(1,2*x+1)*(g+h*r^f), c1 := (h*r)/g*a(2,1+x), c2 := c1*a(1,x+1) + sin(d), a(1,x+1) := c1^(5/2), d := b(y+1)*a(1,x+1), a(1,1+2*x):= (a(1,x+1)*b(y+1)*c)/(d*g^2), b(y+1) := a(1,1+x)+b(y+1) + sin(d), a(1,x+1) := b(y+1)*c + h/(g + sin(d)), d := k*e + d*(a(1,1+x) + 3), e := d*(a(1,1+x) + 3) + sin(d), f := d*(3 + a(1,1+x)) + sin(d), g := d*(3 + a(1,1+x)) + f iname s declare << a(5,5),b(7),c,c1,d,e,f,g,h,r:real*8; x,y:integer>>$ *** a declared operator integer x,y,s0,s2,s6 double precision c,h,r,s34,s3,c1,c2,s4,s24,b(7),a(5,5),s29,k,d,s33 . ,e,f,g s0=x+1 s34=r**f*h+g s2=1+y s6=2*x+1 s3=s34*a(1,s6) c1=a(2,s0)*((r*h)/g) c2=dsin(d)+s34*c1 s4=dsqrt(c1)*c1*c1 d=s4*s3 a(1,s6)=(d*c)/(g*g*d) s24=dsin(d) b(s2)=s4+s3+s24 a(1,s0)=h/(g+s24)+b(s2)*c s29=3+a(1,s0) d=s29*d+dexp(1.0d0)*k s33=s29*d e=s33+dsin(d) f=dexp(1.0d0) g=s33+f % Further reading: SCOPE 1.5 manual section 8, examples 21 and 22. % Also recommended: section 9. optlang nil$ delaydecs$ gentran declare <<a,b,c,d,q,w: real>>$ gentran a:=b+c$ gentran d:=b+c$ gentran <<q:=b+c;w:=b+c>>$ makedecs$ double precision a,b,c,d,q,w a=b+c d=b+c q=b+c w=b+c on gentranopt$ delaydecs$ gentran declare <<a,b,c,d,q,w: real>>$ gentran a:=b+c$ gentran d:=b+c$ gentran <<q:=b+c;w:=b+c>>$ makedecs$ double precision b,c,a,d,q,w a=b+c d=b+c q=b+c w=q off gentranopt$ delayopts$ gentran declare <<a,b,c,d,q,w: real>>$ gentran a:=b+c$ gentran d:=b+c$ gentran <<q:=b+c;w:=b+c>>$ makeopts$ a=b+c d=a q=a w=a delaydecs$ gentran declare <<a,b,c,d,q,w: real>>$ delayopts$ gentran a:=b+c$ gentran d:=b+c$ gentran <<q:=b+c;w:=b+c>>$ makeopts$ makedecs$ double precision b,c,a,d,q,w a=b+c d=a q=a w=a clear a,b,c,d,q,w$ matrix a(2,2)$ a:=mat(((b+c)*(c+d),(b+c+2)*(c+d-3)),((c+b-3)*(d+b),(c+b)*(d+b+4))); [ (b + c)*(c + d) (c + 2 + b)*(d - 3 + c)] a := [ ] [(c - 3 + b)*(b + d) (d + 4 + b)*(b + c) ] gentranlang!*:='c$ delayopts$ gentran aa:=:a$ makeopts$ { { g17=b+c; g18=c+d; aa[1][1]=g18*g17; aa[1][2]=(g18-3)*(g17+2); g16=b+d; aa[2][1]=g16*(g17-3); aa[2][2]=g17*(g16+4); } } end; Time for test: 100 ms