Interní reprezentace a substituce

1 Interní reprezentace

(%i1) pol: x^4+x^3-x^2-x;

Result

(%i2) op(pol);

Result

Pomocí nterms získáme počet sčítanců.

(%i3) nterms(pol);

Result

(%i4) length(pol);

Result

(%i5) inpart(pol,0);

Result

Vrací operátor (stejně jako příkaz op).

(%i6) inpart(pol,4);

Result

(%i7) part(pol,4);

Result

part a inpart vracejí podvýrazy daného výrazu, přičemž inpart se zaměřuje na
interní reprezentaci výrazu (ta může být odlišná od té zobrazené).

(%i8) inpart(pol,4,1);inpart(pol,4,2);

Result

(%i10) [part(pol,0), part(pol,1), part(pol,2), part(pol,3), part(pol,4)];

Result

(%i11) dpart(pol,2);

Result

Označuje podvýraz.

(%i12) listofvars(pol);

Result

(%i13) dispform(pol);

Result

Vrací seznam proměnných, obsažených v zadaném výrazu.

(%i14) nterms(pol);

Result

(%i15) op(pol);

Result

(%i16) op(x^4);

Result

(%i17) op(-x^2);

Result

(%i18) op(x^2*y^3*z^4);

Result

(%i19) r: (y^2-1)/(y-1);

Result

(%i20) op(r);

Result

(%i21) r:(sin(x)^2-1)/(sin(x)-1);

Result

(%i22) op(r);

Result

(%i23) rat(r);

Result

2 Substituce

Substituce se provádí příkazem subst(a,b,c), který má tři povinné parametry.
Nahrazuje b pomocí a ve výrazu c.

(%i24) subst(0,x, cos(x)*(sin(x)+x^2+1));

Result

Subst je čistě syntaktická substituce, a, b musí být buď proměnné nebo
kompletní podvýrazy.

Ekvivalentí zápis je i tento

(%i25) subst(x=0, cos(x)*(sin(x)+x^2+1));

Result

a tento

(%i26) cos(x)*(sin(x)+x^2+1), x=0;

Result

(%i27) expression:1+tan(x)^2;

Result

(%i28) subst(sin(x)/cos(x),tan(x), expression);

Result

(%i29) subst(1-cos(x)^2,sin(x)^2,%);

Result

(%i30) ratsimp(%);

Result

Posloupnost substitucí - program provede první substituci a ve výsledku pak další
substituci. Substituce píšeme do hranatých závorek a oddělujeme je čárkou.
V tomto případě můžeme použít pouze zápis s rovnítkem.

(%i31) subst([tan(x)=sin(x)/cos(x), sin(x)^2=1-cos(x)^2], expression);

Result

(%i32) ratsimp(%);

Result

Paralelní posloupnost substitucí provádí příkaz psubst:

(%i33) psubst ([a^2=b, b=a], sin(a^2) + sin(b));

Result

(%i34) subst ([a^2=b, b=a], sin(a^2) + sin(b));

Result

Paralelní (současná) substituce:

(%i35) psubst([x=y, y=z], x*y^2);

Result

Posloupnost substitucí:

(%i36) subst([x=y, y=z], x*y^2);

Result

(%i37) subst([a=b, b=c, c=a], a+2*b+3*c);

Result

(%i38) psubst([a=b, b=c, c=a], a+2*b+3*c);

Result

(%i39) subst(x+1=y, 3*(x+1)^2+x+1);

Result

V tomto případě se syntaktická substituce neprovedla,
použijeme příkaz ratsubst, který si všímá matematického významu výrazu.

(%i40) ratsubst(y,x+1,3*(x+1)^2+x+1);

Result

Zde je možné použít pouze tento typ zápisu.

(%i41) subst([a=b, b=c, c=a], a+2*b+3*c);

Result

(%i42) load("lrats");

Result

(%i43) lratsubst([a=b, b=c, c=a], a+2*b+3*c);

Result

(%i44) fullratsubst([a=b, b=c, c=a], a+2*b+3*c);

Result

Lze provádět substituce i za části výrazů. Podmínkou je, že Maxima
interně rozezná podvýraz (výstup procedury part).

(%i45) expr1:x*y+z; expr2:x*y*z; expr3:(x*y)^2;

Result

(%i48) subst(soucin,x*y, expr1);

Result

(%i49) subst(soucin,x*y, expr2);

Result

(%i50) subst(soucin,x*y, expr3);

Result

(%i51) length(expr1);

Result

(%i52) [part(expr1,1), part(expr1,2)];

Result

(%i53) length(expr2);

Result

(%i54) [part(expr2,1),part(expr2,2),part(expr2,3)];

Result

(%i55) length(expr3);

Result

(%i56) [part(expr3,1),part(expr3,2)];

Result

Ratsubst (narozdíl od subst) si všímá i matematického významu výrazu.

(%i57) ratsubst(soucin,x*y, expr2);

Result

(%i58) ratsubst(soucin,x*y, expr3);

Result

(%i59) vyraz:a+b+c;

Result

(%i60) subst(d,a+b, vyraz);

Result

(%i61) ratsubst(d,a+b, vyraz);

Result

(%i62) p:a+2*b+3*c;

Result

(%i63) ratsubst(d,a+b,p);

Result

Pro substituci za operandy výrazu můžeme použít příkaz substpart.

(%i64) vyraz : x^2+x+1/x;

Result

(%i65) substpart(y,vyraz,3);

Result

Třetí operand byl nahrazen y.

Opsubs provádí substituci pouze za operátory.

(%i66) load ("opsubst");

Result

(%i67) opsubst(f,g,g(g(x)));

Result

(%i68) opsubst([f=g,g=h],f(x));

Result

Použití substitucí při úpravách výrazů.

(%i69) soucin:(x^2+y^2+2*x*y) * ((x+y)^2+1);

Result

(%i70) factor(soucin);

Result

(%i71) substpart(factor(part(soucin,1)),soucin,1);

Result

Zjednodušení z předcházejícího příkladu je možné provést i takto:

(%i72) subst(x+y=z, soucin);

Result

(%i73) factor(%);

Result

(%i74) subst(z=x+y, %);

Result

(%i75) vyraz:(x^2+2*x+1)^2+(x^2-2*x+1)^2;

Result

(%i76) factor(vyraz);

Result

(%i77) map(factor, vyraz);

Result

Substitucí často používáme při zjednodušování výrazů

(%i78) vyraz:(x+y)^2+1/(x+y)^2;

Result

(%i79) rat(vyraz);

Result

Chceme výraz transformovat na tvar čitatel/jmenovatel bez expanze (x+y)^2.
Dočasně nahradíme x+y pomocí např. z, použijeme příkaz rat a konečně provedeme
zpětnou substituci.

(%i80) subst(x+y=z, vyraz);

Result

(%i81) rat(%);

Result

(%i82) subst(z=x+y,%);

Result


Created with wxMaxima.