Komputeralgebrai algoritmusokJ\303\241rai AntalEzek a programok csak szeml\303\251ltet\303\251sre szolg\303\241lnak.1. T\303\266rt\303\251net2. Algebrai alapok3. Norm\303\241l form\303\241k, reprezent\303\241ci\303\2634. Aritmetikarestart;A 4.1. Algoritmus. BigIntegerMultiply:=proc(a,b,B) local c,t,i,j,carry;
c:=[]; for i from 0 to nops(a)-1 do c:=[op(c),0] od;
for j from 0 to nops(b)-1 do
carry:=0;
for i from 0 to nops(a)-1 do
t:=a[i+1]*b[j+1]+c[i+j+1]+carry;
carry:=iquo(t,B);
c[i+j+1]:=irem(t,B)
od;
c:=[op(c),carry];
od; c;
end;
a:=floor(evalf(10^10*Pi,20)); b:=floor(evalf(10^10*exp(1))); c:=a*b;
a:=convert(a,base,10^4); b:=convert(b,base,10^4); c:=convert(c,base,10^4);BigIntegerMultiply(a,b,10^4);LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnE 4.1. P\303\251lda.with(powseries);a:=powpoly((1-x)^5,x); tpsform(a,x,8);b:=inverse(a); tpsform(b,x,8);LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnE 4.2. P\303\251lda.a:=powpoly(x,x); b:=powsin(a); tpsform(b,x,8);c:=reversion(b); tpsform(c,x,8);LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnA 4.2. Algoritmus. Karatsuba:=proc(a,b,n,B) local aa,bb,a1,a2,b1,b2,n1,n2,c1,c2,c3,c,t;
c:=sign(a)*sign(b);
aa:=abs(a); bb:=abs(b);
if n=1 then
t:=BigIntegerMultiply([aa],[bb],B);
return c*(t[2]*B+t[1])
fi;
n1:=floor(n/2); n2:=n-n1;
a1:=iquo(aa,B^n1); a2:=irem(aa,B^n1);
b1:=iquo(bb,B^n1); b2:=irem(bb,B^n2);
c1:=Karatsuba(a1,b1,n1,B);
c2:=Karatsuba(a1-a2,b2-b1,n2,B);
c3:=Karatsuba(a2,b2,n2,B);
c*(c1*B^(2*n1)+(c1+c2+c3)*B^n1+c3);
end;a:=floor(evalf(10^10*Pi,20)); b:=floor(evalf(10^10*exp(1))); c:=a*b;
debug(Karatsuba); Karatsuba(a,b,3,10^4);LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnA 4.3. Algoritmus. with(CurveFitting);TrialDivision:=proc(a,b,x,L) local i,c,y,La,Lb;
La:=map(y->subs(x=y,a),L);
Lb:=map(y->subs(x=y,b),L);
for i to nops(L) do
if Lb[i]=0 then
if La[i]<>0 then return FAIL else La[i]=0 fi;
else La[i]:=La[i]/Lb[i] fi;
od;
c:=PolynomialInterpolation(L,La,x);
if degree(c,x)=degree(a,x)-degree(b,x) then c else FAIL fi;
end;b:=3*x^3-4*x^2+x-3; c:=6*x^2+2*x-7; a:=expand(b*c); L:=[i$i=0..5];debug(TrialDivision); TrialDivision(a,b,x,L);a:=a-1; TrialDivision(a,b,x,L);E 4.3. P\303\251lda.omega:=(1+I)/sqrt(2); omega^8; omega^4;omega:=I; omega^8; omega^4;LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnE 4.4. P\303\251lda.4^4 mod 17; [4^i$i=0..3] mod 17;A:=Matrix(4,(i,j)->4^((i-1)*(j-1)) mod 17);LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnE 4.5. P\303\251lda.`mod`:=mods;14&^8 mod 41;[14&^i$i=0..7]; map(x->x mod 41,%);[(-9)&^i$i=0..3]; map(x->x mod 41,%);[(-1)&^i$i=0..1]; map(x->x mod 41,%);LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnE 4.6. P\303\251lda.a:=5*x^6+x^5+3*x^3+x^2-4*x+1;b:=5*y^3+y+1; c:=y^2+3*y-4; a=expand(subs(y=x^2,b+x*c));d:=1; e:=5*z+1; b=expand(subs(z=y^2,d+y*e));subs(z=1,d) mod 41; subs(z=1,e) mod 41;subs(y=1,b) mod 41=1+1*6 mod 41; subs(y=-1,b) mod 41=1-1*6 mod 41;subs(z=-1,d) mod 41; subs(z=-1,e) mod 41;subs(y=-9,b) mod 41=1+(-9)*(-4) mod 41; subs(y=9,b) mod 41=1+9*(-4) mod 41;subs(y=1,c) mod 41; subs(y=-1,c) mod 41;
subs(y=-9,c) mod 41; subs(y=9,c) mod 41;subs(x=3,a) mod 41=6+3*(-19) mod 41;
subs(x=-3,a) mod 41=6+(-3)*(-19) mod 41;[14&^i$i=0..7]; map(x->x mod 41,%); map(y->subs(x=y,a) mod 41,%);LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnA 4.4. Algoritmus. mFFT:=proc(a,x,omega,n,m) local A,B,C,b,c,i,j;
if n=0 then return [a mod m] fi;
b:=0; c:=0;
for i from 0 to 2^(n-1)-1 do
b:=b+coeff(a,x,2*i)*x^i;
c:=c+coeff(a,x,2*i+1)*x^i;
od;
B:=mFFT(b,x,omega^2 mod m,n-1,m);
C:=mFFT(c,x,omega^2 mod m,n-1,m);
A:=[0$j=0..2^n-1];
for i from 0 to 2^(n-1)-1 do
A[i+1]:=B[i+1]+omega&^i*C[i+1] mod m;
A[i+1+2^(n-1)]:=B[i+1]-omega&^i*C[i+1] mod m;
od; A;
end;debug(mFFT); mFFT(a,x,14,3,41); undebug(mFFT);LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnE 4.7. P\303\251lda.`mod`:=modp;4^4 mod 17; [4^i$i=0..3] mod 17;A:=Matrix(4,(i,j)->4^((i-1)*(j-1)) mod 17);B:=Matrix(4,(i,j)->4^(-((i-1)*(j-1))) mod 17);evalm(A&*B); map(x->x mod 17,%);LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnA 4.5. Algoritmus. `mod`:=mods;mFFT_Multiply:=proc(a,b,x,omega,n,m) local A,B,c,C,i;
A:=mFFT(a,x,omega,n,m);
B:=mFFT(b,x,omega,n,m);
c:=0;
for i from 0 to 2^n-1 do
c:=c+A[i+1]*B[i+1]*x^i mod m;
od;
C:=mFFT(c,x,omega,n,m);
c:=0;
for i from 0 to 2^n-1 do
c:=c+C[i+1]/2^n*x^i mod m;
od; c;
end;LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnE 4.8. P\303\251lda.a:=3*x^3+x^2-4*x+1; b:=x^3+2*x^2+5*x-3;debug(mFFT_Multiply); mFFT_Multiply(a,b,x,14,3,41); expand(a*b);LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnE 4.9. P\303\251lda.14&^8 mod 41; 14&^4 mod 41;LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnE 4.10. P\303\251lda.with(numtheory);2.^31/ln(2.^31)/phi(2^20);LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnE 4.11. P\303\251lda.15&^8 mod 41; 15&^20 mod 41;evalf(3./Pi^2);LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnE 4.12. P\303\251lda.a:='a';
powcreate(a(n)=1,a(0)=1,a(1)=-2,a(2)=3,a(3)=0,a(4)=1,a(5)=-1,a(6)=2);
tpsform(a,x,8); convert(%,polynom);tpsform(a,x,1); convert(%,polynom); y:=powpoly(1/%,x); two:=powpoly(2,x);multiply(y,subtract(two,multiply(y,a))); tpsform(%,x,2);
convert(%,polynom); y:=powpoly(%,x);multiply(y,subtract(two,multiply(y,a))); tpsform(%,x,4);
convert(%,polynom); y:=powpoly(%,x);multiply(y,subtract(two,multiply(y,a))); tpsform(%,x,8);
convert(%,polynom); y:=powpoly(%,x);multiply(y,a); tpsform(%,x,8);LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnA 4.6. Algoritmus. FastNewtonInversion:=proc(a,x,n) local y,yy,k,two;
tpsform(a,x,1); yy:=convert(1/%,polynom);
y:=powpoly(yy,x); two:=powpoly(2,x);
for k to n do
multiply(y,subtract(two,multiply(y,a))); tpsform(%,x,2^k);
yy:=convert(%,polynom); y:=powpoly(yy,x);
od; yy;
end;FastNewtonInversion(a,x,3);LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnE 4.13. P\303\251lda.G:=(1-2*t*x+x^2)^(-1/2); series(G,x);LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnE 4.14. P\303\251lda.P:=(1-2*t*x+x^2)*y^2-1; PP:=diff(P,y); y0:=1;y1:=series(y0-subs(y=y0,P)/subs(y=y0,PP),x,2);
y1:=convert(y1,polynom);y2:=series(y1-subs(y=y1,P)/subs(y=y1,PP),x,4);
y2:=convert(y2,polynom);LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnE 4.15. P\303\251lda.a:=4+x+2*x^2+3*x^3;P:=y^2-a; y0:=-2; y0:=2;yy:=series(2-(4-a)/4,x,2); yy:=convert(yy,polynom);yy:=series(yy-(yy^2-a)/2/yy,x,4); yy:=convert(yy,polynom);series(yy^2,x,4);LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnA 4.7. Algoritmus. NewtonSolve:=proc(P,y,x,y0,n) local yy,k,PP;
PP:=diff(P,y); yy:=y0;
for k to n do
yy:=series(yy-subs(y=yy,P)/subs(y=yy,PP),x,2^k);
yy:=convert(yy,polynom);
od; yy;
end;NewtonSolve(P,y,x,2,3);series(%^2,x,8);LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0Yn5. K\303\255nai marad\303\251kol\303\241s6. Newton-iter\303\241ci\303\263, Hensel-felemel\303\251s7. Legnagyobb k\303\266z\303\266s oszt\303\2638. Faktoriz\303\241l\303\241s9. Egyenletrendszerek10. Gr\303\266bner-b\303\241zisok11. Racion\303\241lis t\303\266rtf\303\274ggv\303\251nyek integr\303\241l\303\241sa12. A Risch-algoritmus.LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0Yn