/* [wxMaxima batch file version 1] [ DO NOT EDIT BY HAND! ]*/ /* [ Created with wxMaxima version 0.8.6 ] */ /* [wxMaxima: title start ] Interní reprezentace a substituce [wxMaxima: title end ] */ /* [wxMaxima: section start ] Interní reprezentace [wxMaxima: section end ] */ /* [wxMaxima: input start ] */ pol: x^4+x^3-x^2-x; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ op(pol); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Pomocí nterms získáme počet sčítanců. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ nterms(pol); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ length(pol); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ inpart(pol,0); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Vrací operátor (stejně jako příkaz op). [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ inpart(pol,4); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ part(pol,4); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] 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é). [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ inpart(pol,4,1);inpart(pol,4,2); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ [part(pol,0), part(pol,1), part(pol,2), part(pol,3), part(pol,4)]; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ dpart(pol,2); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Označuje podvýraz. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ listofvars(pol); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ dispform(pol); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Vrací seznam proměnných, obsažených v zadaném výrazu. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ nterms(pol); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ op(pol); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ op(x^4); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ op(-x^2); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ op(x^2*y^3*z^4); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ r: (y^2-1)/(y-1); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ op(r); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ r:(sin(x)^2-1)/(sin(x)-1); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ op(r); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ rat(r); /* [wxMaxima: input end ] */ /* [wxMaxima: section start ] Substituce [wxMaxima: section end ] */ /* [wxMaxima: comment start ] Substituce se provádí příkazem subst(a,b,c), který má tři povinné parametry. Nahrazuje b pomocí a ve výrazu c. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ subst(0,x, cos(x)*(sin(x)+x^2+1)); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Subst je čistě syntaktická substituce, a, b musí být buď proměnné nebo kompletní podvýrazy. [wxMaxima: comment end ] */ /* [wxMaxima: comment start ] Ekvivalentí zápis je i tento [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ subst(x=0, cos(x)*(sin(x)+x^2+1)); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] a tento [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ cos(x)*(sin(x)+x^2+1), x=0; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ expression:1+tan(x)^2; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ subst(sin(x)/cos(x),tan(x), expression); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ subst(1-cos(x)^2,sin(x)^2,%); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ ratsimp(%); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] 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. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ subst([tan(x)=sin(x)/cos(x), sin(x)^2=1-cos(x)^2], expression); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ ratsimp(%); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Paralelní posloupnost substitucí provádí příkaz psubst: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ psubst ([a^2=b, b=a], sin(a^2) + sin(b)); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ subst ([a^2=b, b=a], sin(a^2) + sin(b)); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Paralelní (současná) substituce: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ psubst([x=y, y=z], x*y^2); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Posloupnost substitucí: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ subst([x=y, y=z], x*y^2); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ subst([a=b, b=c, c=a], a+2*b+3*c); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ psubst([a=b, b=c, c=a], a+2*b+3*c); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ subst(x+1=y, 3*(x+1)^2+x+1); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] V tomto případě se syntaktická substituce neprovedla, použijeme příkaz ratsubst, který si všímá matematického významu výrazu. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ ratsubst(y,x+1,3*(x+1)^2+x+1); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Zde je možné použít pouze tento typ zápisu. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ subst([a=b, b=c, c=a], a+2*b+3*c); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ load("lrats"); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ lratsubst([a=b, b=c, c=a], a+2*b+3*c); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ fullratsubst([a=b, b=c, c=a], a+2*b+3*c); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Lze provádět substituce i za části výrazů. Podmínkou je, že Maxima interně rozezná podvýraz (výstup procedury part). [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ expr1:x*y+z; expr2:x*y*z; expr3:(x*y)^2; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ subst(soucin,x*y, expr1); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ subst(soucin,x*y, expr2); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ subst(soucin,x*y, expr3); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ length(expr1); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ [part(expr1,1), part(expr1,2)]; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ length(expr2); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ [part(expr2,1),part(expr2,2),part(expr2,3)]; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ length(expr3); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ [part(expr3,1),part(expr3,2)]; /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Ratsubst (narozdíl od subst) si všímá i matematického významu výrazu. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ ratsubst(soucin,x*y, expr2); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ ratsubst(soucin,x*y, expr3); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ vyraz:a+b+c; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ subst(d,a+b, vyraz); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ ratsubst(d,a+b, vyraz); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ p:a+2*b+3*c; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ ratsubst(d,a+b,p); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Pro substituci za operandy výrazu můžeme použít příkaz substpart. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ vyraz : x^2+x+1/x; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ substpart(y,vyraz,3); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Třetí operand byl nahrazen y. [wxMaxima: comment end ] */ /* [wxMaxima: comment start ] Opsubs provádí substituci pouze za operátory. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ load ("opsubst"); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ opsubst(f,g,g(g(x))); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ opsubst([f=g,g=h],f(x)); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Použití substitucí při úpravách výrazů. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ soucin:(x^2+y^2+2*x*y) * ((x+y)^2+1); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ factor(soucin); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ substpart(factor(part(soucin,1)),soucin,1); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Zjednodušení z předcházejícího příkladu je možné provést i takto: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ subst(x+y=z, soucin); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ factor(%); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ subst(z=x+y, %); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ vyraz:(x^2+2*x+1)^2+(x^2-2*x+1)^2; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ factor(vyraz); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ map(factor, vyraz); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Substitucí často používáme při zjednodušování výrazů [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ vyraz:(x+y)^2+1/(x+y)^2; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ rat(vyraz); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] 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. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ subst(x+y=z, vyraz); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ rat(%); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ subst(z=x+y,%); /* [wxMaxima: input end ] */ /* Maxima can't load/batch files which end with a comment! */ "Created with wxMaxima"$