Kapitel 12
> restart:
Substitutionen
> subs(x=a,(x+y)*z);subs(x+y=a,(x+y)*z);subs(x=a+1,sqrt(x^2+1));
> subs( x+y=3, x+y+z);
> op(x+y+z);
> op((x+y)*z);
>
> subs( x=2, y=3, x^2 + 2*x*y + y^2 );
> subs( x=y^2, y=x^2, sin(x)+cos(y) );
> subs( y=x^2, x=y^2, sin(x)+cos(y) );
> subs( {x=y^2, y=x^2}, sin(x)+cos(y) );
> solve( {x^2+y^2=10, x+y=4});
> subs("[1], x^2 + 2*x*y + y^2);
> subs( x+y=3, sin(x+y));
algsub ist leistungsfähiger
> algsubs( x+y=3, x+y+z);
> algsubs( x+y=3, 2*x+y+z);
> algsubs( x+y=3, 2*x+y+z, [y]);
> algsubs( x+y=3, 2*x+y+z, exact);
> algsubs( x^2=a, x^5);
> algsubs(s/t=v, s/t^2);
ein komplizierteres Beispiel
> f:=x/sqrt(10+2*sqrt(5))+y/sqrt(10-2*sqrt(5));
>
a:=sqrt(10+2*sqrt(5));
b:=sqrt(10-2*sqrt(5));
Das funktioniert nicht wegen des negativen Exponenten der Wurzel
> subs(a=A, b=B, f);
etwas kompliziert, aber so gehts
> f2:=subs(1/a=1/A, 1/b=1/B, f);
Noch so ein Beispiel
> restart;
> f:=x/sqrt(a+b*sqrt(c));
> algsubs(sqrt(a+b*sqrt(c))=A, f);
Error, (in algsubs) no variables appearing rationally in pattern
> algsubs(a+b*sqrt(c)=a, f);
> subs(1/sqrt(a+b*sqrt(c))=1/A,f);
>
expand
> restart:
> x*(x-a)^2*(x-b)^3;
> expand(%);
> a^(b+c^(d+e*f)): % = expand(%);
> expand( log(a*b) ), expand( log(a^b));
> expand(sin(4*x));
> expand(sin(a+b));
> f:=(x-a)^2/(x+b)^3: expand(f);
> expand(numer(f)) / expand(denom(f));
> normal(f,expanded);
factor
> factor(x^4+x^3*a-4*x^3*b-4*x^2*a*b+4*x^2*b^2+4*x*b^2*a);
> factor(x^4-y^4);
> factor((x^2+x-6)/(x^2-1));
> factor(x^2-2);
> factor(x^2-2.);
> factor(x^2-2,sqrt(2));
> factor(x^2+3,{I,sqrt(3)});
> factor(x^2+3,RootOf(x^2+3));
> convert(%,radical);
>
Noch ein Beispiel
> restart;
> f:=4*x^5+20*x^3+4*x^2+20;
> factor(f);
> factor(f,{RootOf(op(%)[3]),RootOf(op(%)[4])});
> convert(%,radical);
> evalf(%);
> factor(f,complex);
combine
> combine(4*cos(x)^3,trig);
> combine(sin(x+y)*sin(x-y),trig);
> combine(cos(x)^2,trig);
> combine(sqrt(3)*sqrt(5));
> assume(a>0,b>0):combine(sqrt(a)*sqrt(b));
> unassign('a,b'):combine(x^a*x^b,power);
> combine( exp(sin(x)^2)*exp(cos(x)^2));
> restart:
> combine(-ln(a)+2*ln(b), ln);
> combine(-ln(a)+2*ln(b), ln, symbolic);
> assume(a>0,b>0):
> combine(-ln(a)+2*ln(b),ln);
sometimes, combine is a little bit too restrictive (expected: )
the option symbolic does not help
>
assume(n,posint):
combine(-ln(a)+n*ln(b), ln);
> combine(-ln(a)+ln(b)*n, ln,symbolic);
expected
> assume(b>0,c>0):
> combine(exp(b*ln(c)), ln);
> combine(exp(b*ln(c)), ln, symbolic);
> restart:
> combine(int(f(x),x=a..b)+ int(g(x), x=a..b));
no simplification with different integration variables
> combine(int(f(x),x=a..b)+ int(g(y), y=a..b));
> expand( (sin(5*x)-cos(5*x))^3);
> combine(%,trig);
> trm:=diff(x/(1-a^x), x$2);
combine vereinfacht diesen Ausdruck nicht
> combine(trm);
auch simplify hat keinen Erfolg
> simplify(trm);
mit normal erreicht man die gewünschte Vereinfachung:
> normal(trm);
radnormal
> f:=(sqrt(2)-sqrt(3)) / (sqrt(2)*sqrt(3));
> simplify(f);
> combine(f);
> radnormal( f );
>
simplify
für manche Terme liefert simplify sofort das Erwartete:
> diff( x/(1-x^2), x$3);
> simplify(%);
> simplify( sin(x)^2+cos(x)^2 );
> simplify( exp(a*ln(b)) );
>
f:=sin(a^2-b^2)^2 + cos( (a-b)*(a+b) )^2;
simplify(f);
> expand(f);
> simplify( %);
> simplify( sqrt(Pi^2 * n^2) );
> simplify( sqrt(Pi^2 * n^2), symbolic);
> assume(n>=0): simplify(sqrt(Pi ^2 * n^2));
> simplify((a*b)^c), simplify((a*b)^c, symbolic);
> simplify(sqrt(1/x)), simplify(sqrt(1/x), symbolic);
für andere nicht
> f:=(x-2)*(x+2)*(x^2+4);
> simplify( f );
expand liefert hier eher das Erwartete. Aber: auch das Resultat von simplify ist einfach
in Bezug auf den Grad der beteiligten Faktoren.
> expand(%);
simplify( (x-1)^10+1 );
einige Ausdrücke sind wirklich schwierig
> restart:
> f:=diff( x/(1-sin(x)), x$3);
> simplify(f);
>
> combine(f);
aber:
> normal(f);
> combine(numer(%))/denom(%);
das geht auf jeden Fall besser als von Hand
Andere Methode:
> subs(1-sin(x)=A,f);
> collect(%,A);
> subs(A=1-sin(x),%);
>
simplify einschränken
> f:=exp(b*ln(a)) - (a*sin(x)^2+a*cos(x)^2)^b;
nur trigonometrische Vereinfachungen
> simplify(f,trig);
nur Vereinfacungen von exp-Ausdrücken
> simplify(f,exp);
jetzt alles
> simplify(f);
simplify mit Nebenbedingungen
>
gl1 := a+b+c = 3:
gl2 := a^2+b^2+c^2 = 9:
gl3 := a^3+b^3+c^3 = 24:
simplify(a^4+b^4+c^4, {gl1,gl2,gl3});
> simplify( (a-b+c)^2, {a+b=1});
> simplify( (a-b+c)^2, {a+b=1}, {a});
>
gl1:=x^2+3*x+4*x*y=7;
gl2:=y^2-6*x*y+x=0;
> lsg:=simplify(gl1, {gl2},{x});
> simplify(gl2,{gl1},{y});
>
gl1 := a+b+c = 7:
gl2 := a-b+3*c = 8:
gl3 := a-2*b+5*c = 9:
simplify( {gl1,gl2}, {gl3},{a});
convert
> convert(sin(x),exp);
> convert(sin(2*x)^2, tan);
> convert(exp(I*x),trig);
> convert(arctan(x),ln);
> restart:
> f:=arctan(tan(t));
> simplify(%,symbolic);
> convert( (n+m)!, GAMMA);
> convert( GAMMA(n+m)!, factorial);
Polynome, Rationale Funktionen
> sin(x)/x^2: numer(%), denom(%);
> a*x/(1-x^2)+b/x;
> numer(%), denom(%);
> quo(x^2-3,x+1,x);
> p1:=a*x^2+b*x+c: p2:=d*x+e:
> quo(p1,p2,x);
> rem(p1,p2,x);
> simplify(%% * p2 + %);
> diff(x^n/(a+x),x);
> normal(%);
> normal(%,expanded);
> convert(x/(x^4-1),parfrac,x);
> convert(x*y/(x-y)^2, parfrac, x);
> convert(x*y/(x-y)^2, parfrac, y);
> f:=sin(x) / (sin(x)^2-1);
Release 3 was able to convert this expression to partial fraction form
> convert(f, parfrac, sin(x));
Error, (in parfrac/parfrac) cannot convert to partial fraction form
> convert(f, parfrac, sin);
Error, (in convert/parfrac) argument not a rational function
in Release 4, a substitution helps
> convert(subs(sin(x)=si,f), parfrac, si);subs(si=sin(x),%);
> f:=-(-exp(-s)/s + exp(-2*s)/s) / (s+1);
> convert(f,parfrac,s);
Error, (in convert/parfrac) argument not a rational function
> convert( subs(exp(-s)=e1, exp(-2*s)=e2, f), parfrac, s);
> subs(e1=exp(-s), e2=exp(-2*s), %);
> simplify(%-f);
fullparfrac
> convert((x^2+1)/(x^2+x+1), parfrac, x);
> convert(convert(%, fullparfrac, x),radical);
confrac
> convert((x^4-2)/x^6, confrac, x);
horner
> f:=expand( (x-y)^3*x^2*y^2 + y^3 + y^2 + y);
> convert(f,horner,x);
> convert(f,horner,[x,y]);
compoly
> f:=expand(subs(a=x^2+x, (a^2-a+1)^2));
> compoly(f);
>
trigsubs
> trigsubs(sin(x)^2);
> trigsubs( sin(x)=sqrt(1-cos(x)^2), (sin(x)^2-cos(x)^2)^2 );
Error, (in trigsubs) not found in table - use subs to over ride
> trigsubs( sin(x)^2=1-cos(x)^2, (sin(x)^2-cos(x)^2)^2 );
> trigsubs( sin(x+y) = 2 * sin((x+y)/2) * cos((x+y)/2) );
Ausdrücke mit mehreren Variablen
(sort, collect, select, remove etc.)
> f:=expand( (a*x^2*y+b*y)^2 + (x-2*y+c*y^2)^2 + x^3 + x^4*y^2);
sort
> sort(f);
> sort(f,x);
> sort(f,[x,y]);
> sort(f,{x,y});
collect
> collect(f,x);
> collect(f,[x,y]);
> collect(f,[x,y],distributed);
> f:=expand((sin(x)-cos(x)^2)^2+(a-cos(x))^2);
> sort(f,cos(x));
> collect(f,cos(x));
> restart:
> f:=(y*diff(f1(x),x$2) + x*diff(f1(x),x$2));
> collect(f,diff);
select, remove
> f:=expand((sin(x)-cos(x)^2)^2+(a-cos(x))^2);
> select(has,f,a);
> select(has,f,cos(x)^2);
> select(has,f,{cos(x)^2,sin(x)^2});
> f:=expand((x-y)^8);
> select(p->degree(p,x)>4,f);
> remove(p->degree(p,x)>4,f);
> is(%+%%=f);
> selectremove(p->degree(p,x)>4,f);
> select(has,sin(x)+cos(x),sin);
> select(has,sqrt(sin(x)+cos(x)),sin);
series
> expand((x^(1/2)+a)^3 + (x^(3/2)+b)^3);
> series(%,x,20);
Beispiele
Beispiel 1
> f:=diff(x/(1-sin(x)), x$3);
> f1:=seq( select(p->has(p,1/(1-sin(x))^n), f), n=2..4);
> convert( [seq(normal(p),p=[f1])] , `+`);
> is(f=%);
Beispiel 2
> f:=int(1/(1+x^5),x);
> f1:=collect(f,[ln,arctan]);
> is(f1=f2);
> is(evalf(f1)=evalf(f));
Beispiel 3
> restart: interface(imaginaryunit='j');
> Z:=beta/(omega*epsilon);
> Er:=Z*I*dl/(2*Pi*r^2)*(1+1/(j*beta*r))*exp(-j*beta*r)*cos(theta);
> Er1:=select(x->not has(x,-j*beta*r), Er);
> Er2:=expand(Er1);
> E_nah:=select(has, Er2, r^(-3));
> Er3:=expand(Er);
> E_fern:=select(has,Er3,r^(-2));
>