Maxima Open Source Software ve výuce matematiky a fyziky - Mgr. Michal Musílek říjen 006-1 -
- -
Jak získat, nainstalovat a spustit Maximu Na domovské stránce http://maxima.sourceforge.net/ systému počítačové algebry Maxima jsou v sekci Download k dispozici instalační balíčky jak pro Windows, tak pro Linux. Instalaci jsem vyzkoušel pod Windows 000, Windows XP Home a pod Mandrake Linuxem 10.1 a ve všech případech proběhla naprosto bezproblémově. V systému Windows se program objeví v nabídce [START] a, pokud to během instalace neodmítneme, také jako ikona na ploše. Dialog se spouští v okně, které je rozděleno do dvou nad sebou umístěných oblastí. V Linuxu je možné program spustit také v grafickém režimu. Např. v mém Mandrake - prostředí KDE zvolím [ ] > Další aplikace > Věda > Matematika > Maxima. Pod Linuxem můžeme program spustit také v textové konzole příkazem maxima. Nejprve se přepneme do textové konzole nebo spustíme terminálové okno v grafickém prostředí a za výzvu systému zapíšeme do příkazové řádky maxima. Objeví se úvodní hlášení programu, které končí řádky: Distributed under the GNU Public License. See the file COPYING. Dedicated to the memory of William Schelter. This is a development version of Maxima. The function bug_report() provides bug reporting information. (C1) Poslední řádek (C1) je už výzva Maximy k zadání příkazu. Maxima se tedy ovládá z příkazového řádku a to i když pracujeme v grafickém prostředí. Hlavní výhodou grafického prostředí je, že ve spodní části okna máme k dipozici stručnou nápovědu. Ovládání je naprosto analogické 1 pod oběma operačními systémy, takže je v tomto textu nebudeme nijak odlišovat. První kroky - příkazy Maximy Každý příkaz musí končit středníkem, jinak se neprovede! Reakce na správné zadání (C1) 1+1; (D1) Na chybné zadání bez středníku (C1) 1+1 Maxima nezareaguje. Pokud na středník zapomenete, můžete ho doplnit na dalším řádku. Po doplnění středníku se příkaz provede. Vyzkoušejte příkazy pro všechny základní aritmetické operace: (C) 9-6/3; (C4) sqrt(11); (D) 7 (D4) 11 (C3) 5^3-5*5; (C5) 5!+4!; (D3) 100 (D5) 144 1 Podle verze Maximy může být různé označování výzvy systému - vstup (C1), (%i1) a jeho odpovědí - (D1), (%o1), kde číslo 1,, 3,... je pořadové číslo zadaného příkazu. Pro umocňování používáme symbol stříška ^, ale je možné používat také dvě hvězdičky **. Při násobení nesmíme vynechat symbol hvězdička *. - 3 -
Maxima počítá přesně se zlomky a výsledek zobrazuje v základním tvaru ve třech řádcích: (C6) 1/5+1/6; 11 (D6) 30 Zadáme-li algebraický výraz tak se nejprve jenom opíše, např.: (C7) (x+5)^3; 3 (D7) (x + 5) Jestliže chceme výraz roznásobit, použijeme příkaz expand(výraz);, pokud chceme roznásobit nebo jinak použít naposledy zadaný výraz, není třeba ho znovu vypisovat 3, stačí použít znak procent (%): (C8) expand(%); 3 (D8) x + 15x + 75x + 15 Jiná je situace u následujícího lomeného výrazu, který nepomůže expandovat. Pro zkrácení musíme použít příkaz radcan(výraz);: (C9) (a^-b^)/(a+b); a - b (D9) (C10) expand(%); (D10) (C11) radcan(%); (D11) (C1) expand((a-*b)^3); (D1) a + b a b + a + b a + b a - b Ludolfovo číslo, Eulerovo číslo a numerické výpočty 3 3 a - 6 a b + 1 a b - 8 b Maxima umí pracovat s iracionálními čísly jako je Ludolfovo číslo π, nebo základ přirozených logaritmů e. Používá pro ně znaky %pi a %e. Zadáme-li je do výpočtu, výsledek může být zobrazen opět pomocí těchto zástupných znaků. Jestliže chceme výsledek zobrazit numericky (pomocí desetinného čísla), musíme za výraz napsat čárku a slovo numer;. Vyzkoušejte: (C13) %e; (D13) %E (C14) %e, numer; (D14).7188188459045 3 Pokud se chceme vrátit nikoliv k naposled zadanému výrazu, ale k výrazu zadanému dříve, dáme do závorek místo znaku procent označení řádku s výrazem např. expand(c7); - 4 -
(C15) *%pi; (D15) %PI (C16) %, numer; (D16) 6.83185307179586 Určitě jste si všimli, že numerické výsledky jsou uvedeny na 15 desetinných míst, ve skutečnosti ovšem na 16 platných číslic: (C17) 100000*%PI, numer; (D17) 314159.653589793 Se stejnou přesností, ale v semilogaritmickém tvaru vrací výsledky výpočtů funkce bfloat(výraz); Přesnost této funkce můžeme změnit 4 pomocí nastavení globální proměnné fpprec. Nejprve ověříme, že default hodnota je 16, potom ji změníme na 333 a nakonec si dáme vypsat π na 33 desetinných míst: (C18) fpprec; (D18) 16 (C19) fpprec: 333; (D19) 333 (C0) bfloat(%pi); (D0) 3.141596535897933846643383795088419716939937510580# 9749445930781640686089986803485341170679814808651# 383066470938446095505831753594081848111745084107# 019385110555964469489549303819644881097566593344618# 475648337867831657101909145648566934603486104543664# 81339360760491417374587006606315588174881509096B0 Písmeno B odděluje exponent u desítky (zde krát deset na nultou ). Podobně jako s π nebo e počítá maxima s odmocninami. Částečně odmocní co lze, o numerické vyjádření musíme požádat (vyzkoušejte): C(1) sqrt(75); 75 = 5 3 D(1) 5 SQRT(3) Řešení rovnic a soustav rovnic Řešení rovnice vyvoláme pomocí příkazu solve(rovnice);. Pokud je rovnice v anulovaném tvaru (pravá strana je 0), stačí do závorky zapsat výraz představující levou stranu rovnice: (C1) 1/*x+5=1/3*x+7; x x (D1) + 5 = + 7 3 (C) solve(%); (D) [x = 1] (C3) solve(5*x+0); (D3) [x = -4] Pokud chceme řešit soustavu rovnic, je nejpřehlednější zadat každou rovnici zvlášť a potom zadat příkaz k vyřešení soustavy tak, že odkazy na jednotlivé rovnice 4 Na rozdíl od přesnosti výsledku zobrazeného příkazem numer;,kterou změnit nelze. - 5 -
uspořádáme do vektoru (tj. umístíme do hranatých závorek a oddělíme čárkami): (C4) x-*y+z=1; (D4) x y + z = 1 (C5) -x+3*y+*z=0; (D5) - x + 3 y + z = 0 (C6) *x-y+5*z=5; (D6) x y + 5 z = 5 (C7) solve([c4,c5,c6]); (D7) [[x = 3, y = 1, z = 0]] Příkaz solve má ve skutečnosti dva parametry. Prvním z nich je rovnice, případně vektor s jednotlivými rovnicemi soustavy, druhým je neznámá, případně vektor s jednotlivými neznámými. Pokud je počet rovnic a neznámých shodný, můžeme druhý parametr vynechat. U rovnic s parametrem musíme druhý parametr zadat: (C8) t*x^+t^*x+t=0; (D8) t x + t x + t = 0 (C9) solve(c8,x); SQRT(t -4) + t SQRT(t -4) - t (D9) [x = -, x = ] Všimněte si, že Maxima má ve zvyku občas řadit části výsledku jinak, než jsme zvyklí. To se vám možná stalo u soustavy rovnic, kde se nejprve zobrazil kořen z a až nakonec x. V případě rovnice C8 bychom množinu řešení zapsali ve tvaru { t t 4, t t 4} navíc za nás Maxima rozhodně neprovede diskuzi 5 závislosti počtu řešení na hodnotě parametru t. Definování funkcí a standardní funkce v Maximě Velmi jednoduše můžeme definovat libovolnou polynomickou funkci. Ukažme si to na příkladech kvadratické funkce a kubické funkce: (C10) f(x):=x^-6*x+8; (D10) f(x) := x - 6 x + 8 (C11) f(1); (D11) 3 (C1) f(); (D1) 0 (C13) f(3); (D13) - 1 (C14) f(4); (D14) 0 5 Viz příklad 7 v učebnici Charvát, J. - Zhouf, J. - Boček, L. Matematika pro gymnázia - Rovnice a nerovnice. Dotisk 3. vydání. Prometheus Praha 004. ISBN 80-7196-154-X. - 6 -
(C15) f(5); (D15) 5 (C16) g(x):=x^3-8; 3 (D16) g(x) := x - 8 (C17) g(1); (D17) - 7 (C18) g(); (D18) 0 Maxima samozřejmě zná všechny běžné matematické funkce, které můžeme použít jak samostatně, tak jako součást definice složitějších funkcí: (C19) sin(%pi/6); 1 (D19) (C0) cos(%pi/6); SQRT(3) (D0) (C1) exp(); (D1) %E (C) log(%e); (D) 1 (C3) log(x):=log(x)/log(); LOG(x) (D3) log(x) := LOG() (C4) log(8); (D4) 3.0 Zobrazování grafů funkcí příkaz plotd Pravděpodobně nejužitečnější funkcí CAS 6 Maxima pro nasazení v běžné vyučovací hodině matematiky je zobrazení grafu funkce na zadaném intervalu <a, b>. Používáme k němu příkaz plotd(funkce,[proměnná,od,do]);. Pokud chceme zobrazit více funkcí najednou zapíšeme je do hranatých závorek, oddělené čárkami, jako vektor. Jestliže pracujete pod Linuxem, spusťte si nyní Maximu v textové konzole příkazem maxima. Tím získáte všechny výhody práce v příkazovém řádku. Např. se můžete pomocí kurzorových šipek vracet k dříve zadaným příkazům a editovat je. Grafy funkcí se budou zobrazovat v samostatných grafických oknech, která si můžete podle libosti uspořádat na ploše monitoru, a práce v konzole je tak přehlednější než práce v grafickém režimu. Maximu ukončíte příkazem quit();. 6 CAS computer algebra systém systém počítačové algebry - 7 -
Pokud budete chtít samostatná okna grafů v grafickém prostředí Linuxu či Windows, stačí zvolit možnost Separate v nabídce Options > Plot Windows. (C1) plotd(sin(x),[x,0,*%pi]); (D1) 0 Pokud pracujeme v textové konzole, zobrazí se nám každý graf samostatně v novém grafickém okně. Obrázek okna pak snadno získáme a uložíme pomocí programu KSnapshot. Obrázek pak můžeme vložit do svého matematického textu. Vkládaní vzorců pomocí editoru OpenOffice.org Math se naučíme příště. (C) plotd([sin(x),sin(x+%pi/),sin(x)+1],[x,0,*%pi]); (D) 0 (C3) plotd([x^,x^-5*x,x^-6,x^-5*x-6],[x,-5,7]); (D3) 0 Grafy funkcí dvou proměnných příkaz plot3d Pokud nemáme k dispozici vhodný počítačový nástroj, pak ve školské matematice zpravidla prostorové grafy funkcí dvou proměnných nezobrazujeme. Máme-li ovšem k dispozici Maximu, je zobrazení 3D grafů dílem okamžiku: - 8 -
(C4) plot3d(x^-y^,[x,-5,5],[y,-5,5]); (D4) 0 (C5) plot3d(sin(x)-cos(y),[x,-5,5],[y,-5,5]); (D5) 0 (tj. ukážeme na něj kurzorem myši, stiskneme levé tlačítko, držíme ho a pohybujeme myší směrem, kterým chceme obrázek natočit). Goniometrie a trigonometrie Pro úpravy goniometrických výrazů se používají funkce trigreduce(výraz); trigexpand(výraz); a trigsimp(výraz);. Ukažme si to na příkladech: (C6) *sin(x)*cos(x); (D6) cos(x) sin(x) (C7) trigreduce(%); (D7) sin( x) (C8) cos(*x); (D8) cos( x) (C9) trigexpand(%); (D9) cos (x) - sin (x) Některé složitější goniometrické výrazy se zjednoduší, když je nejprve rozložíme, tj. expandujeme. Ukažme si to opět na příkladech: (C10) sin(%pi/6+x)+sin(%pi/6-x); (D10) %pi %pi sin(x + ) - sin(x - ) 6 6 (C11) trigexpand(%); (D11) cos(x) sin π 6 x sin π 6 x = sin π 6 cos x sin xcos π 6 sin π 6 cos xsin xcos π 6 = sin π 6 cos x - 9 -
(C1) cos(*x)/(sin(x)+cos(x)); cos( x) (D1) sin(x) + cos(x) (C13) trigexpand(%); cos (x) - sin (x) (D13) sin(x) + cos(x) (C14) trigsimp(%); (D14) cos(x) - sin(x) cosx sin x cos x = cos xsin x sin x cos x = cos xsin x cos x sin x cos x sin x = cos xsin x Velmi opatrní musíme být při řešení goniometrických rovnic. Maxima může některé kořeny vynechat - sama na to upozorňuje, periodicitu řešení nevyznačuje a některé rovnice odmítá řešit úplně: (C15) (5+sin(t))/(1-sin(t))=3; sin(t) + 5 (D15) = 3 1 - sin(t) (C16) solve(%); 'solve' is using arc-trig functions to get a solution. Some solutions will be lost. %pi (D16) [t = - ] 6 Ve skutečnosti množina všech řešení P = { 7 6 } { π k π,k Z 11 6 } π k π, k Z (C17) sin(t)+sqrt(3)*cos(t)=1; (D17) sin(t) + sqrt(3) cos(t) = 1 (C18) solve(%); (D18) [sin(t) = 1 - sqrt(3) cos(t)] Protože tuto rovnici Maxima místo řešení pouze upravila, zkusíme ji vyřešit alespoň graficky. Úpravu v řádku D18 využijeme a zobrazíme zvlášť levou a pravou stranu: (C19) plotd([sin(t),1-sqrt(3)*cos(t)],[t,0,*%pi]); Z grafu vidíme, že v intervalu <0; π) mají grafy dva průsečíky, tedy rovnice má v tomto intervalu dvě řešení. Použijeme-li záměrný kříž (tedy kurzor myši) k odečtení souřadnic průsečíků a povšimneme-li si hodnot x souřadnic vidíme množinu všech řešení P = { π k π, k Z } { 11 6 π k π, k Z } - 10 -
Komplexní čísla Maxima umí pracovat s komplexními čísly. Imaginární jednotku značíme %i. Potom algebraický tvar komplexního čísla je x + y*%i. Pomocí operátoru dvojtečka můžeme komplexní čísla pojmenovat jedním písmenem a pak s nimi provádět běžné algebraické operace: (C1) a:+%i; (D1) %i + (C) b:1-*%i; (D) 1 - %i (C3) a+b; (D3) 3 - %i (C4) a-b; (D4) 3 %i + 1 (C5) a*b; (D5) (1 - %i) (%i + ) (C6) radcan(%); (D6) 4-3 %i Dělení se ovšem neprovede, ale pouze naznačí (vyzkoušejte). Kromě běžných operátorů máme k dispozici funkce pro výpočet absolutní hodnoty abs(z);, pro převod do polárního exponenciálního tvaru polarform(z);, zjištění velikosti směrového úhlu ϕ carg(z);, do goniometrického tvaru demoivre(z); a zpět do algebraického tvaru rectform(z);: (C7) abs(a); (D7) sqrt(5) (C8) abs(a*b); (D8) 5 (C9) polarform(b); - %i atan() (D9) sqrt(5) %e (C10) demoivre(%); 1 %i (D10) sqrt(5) ( - ) sqrt(5) sqrt(5) Při řešení rovnic Maxima automaticky počítá i komplexní kořeny (i když koeficienty rovnice jsou reálná čísla): (C11) 5*x^+6*x+5; (D11) 5 x + 6 x + 5 (C1) solve(%); 4 %i + 3 4 %i - 3 (D1) [x = -, x = ] 5 5-11 -
Matice a operace s nimi Maxima ovládá velké spektrum maticových operací. Ukážeme si pouze část, kterou můžeme využít i na středoškolské úrovni výuky. Vložit prvky matice můžeme interaktivně pomocí funkce entermatrix. Vložíme dvě matice A a B a vypočteme součiny matic A.B a B.A: (C1) A: entermatrix(,3); Row 1 Column 1: 1; Row 1 Column : ; Row 1 Column 3: 3; Row Column 1: -1; Row Column : 0; Row Column 3: 1; Matrix entered. [ 1 3 ] (D1) [ - 1 0 1 ] (C) B: entermatrix(3,); Row 1 Column 1: 1; Row 1 Column : ; Row Column 1: 3; Row Column : 4; Row 3 Column 1: 5; Row 3 Column : 6; Matrix entered. [ 1 ] (D) [ 3 4 ] [ 5 6 ] (C3) A.B; [ 8 ] (D3) [ 4 4 ] (C4) B.A; [ -1 5 ] (D4) [ -1 6 13 ] [ -1 10 1 ] Podle definice maticového součinu snadno ověříme, že skutečně platí [ 1 3 1 0 1] [1 6] 3 4 = 5 8 [ 4 4] A = [ 1 3 1 0 1] B = [1 3 4 5 6] Podobně můžeme ověřit i výsledek druhého násobení matic B.A. Pokud pro zadávání matice zvolíme stejný počet řádků i sloupců (čtvercová matice), Maxima se zeptá, zda chceme zadávat diagonální, symetrickou, antisymetrickou, nebo obecnou matici. - 1 -
Jiný způsob zadání matice je pomocí příkazu matrix, jehož argumentem je seznam řádků matice (každý řádek jako vektor v hranatých závorkách): (C5) C: matrix([1,,3],[1,-1,1],[5,1,-]); [ 1 3 ] (D5) [ 1-1 1 ] [ 5 1 - ] (C6) X: matrix([x],[y],[z])$ (C7) C.X; [ x + y + 3 z ] (D7) [ x y + z ] [ 5 x + y x ] V tuto chvíli už vidíme levé strany soustavy rovnic, kterou můžeme v maticovém tvaru zapsat jako C.X = P. Přidáme-li matici P pravých stran a můžeme řešit: (C8) P: matrix([-1],[6],[5])$ (C9) invert(c); [ 1 7 5 ] [ -- -- -- ] [ 33 33 33 ] [ 7 17 ] (D9) [ -- - -- -- ] [ 33 33 33 ] [ 3 1 ] [ -- -- - -- ] [ 11 11 11 ] (C10) invert(c).p; [ ] (D10) [ - 3 ] [ 1 ] Soustava rovnic má tedy řešení x =, y = -3, z = 1. Všimněme si znaku $ dolar, který je uveden na konci některých příkazů místo středníku a který potlačí vypsání odpovědi systémem Maxima. Tím jsme ušetřili několik řádků textu. Na závěr exkurze do vyšší algebry determinant matice C a matice transponovaná k matici C. (C11) determinant(c); (D11) 33 (C1) transpose(c); [ 1 1 5 ] (D1) [ - 1 1 ] [ 3 1 - ] - 13 -
Derivace a totální diferenciál K výpočtu derivace i totálního diferenciálu dané funkce slouží příkaz diff, který může mít různý počet parametrů. Ukážeme si to na příkladu z kinematiky. Pro dráhu rovnoměrně zrychleného pohybu v závislosti na čase platí s(t) = ½ vt + v 0 t + s 0. Derivováním tohoto vztahu podle času získáme nejprve vztah pro rychlost a potom pro zrychlení. C(1) s(t):=1/*a*t^+v0*t+s0; 1 D(1) s(t) := - a t + v0 t + s0 C() diff(s(t),t); první derivace D() a t + v0 C(3) diff(s(t),t,); druhá derivace D(3) a Pro totální diferenciál použijeme příklad z dynamiky. Hybnost je definována jako součin hmotnosti a rychlosti tělesa. Obě se obecně mohou měnit. C(4) p(m,v):=m*v; D(4) p(m, v) := m v C(5) diff(p(m,v)); D(5) m del(v) + v del(m) Neboli d p = md v v dm, tedy k změně hybnosti tělesa dojde buď změnou jeho rychlosti nebo jeho hmotnosti. Integrály K výpočtům integrálů slouží příkaz integrate(expr,x); pro neurčitý nebo integrate(expr,x,a,b); pro určitý integrál. Ukažme si výpočet momentu setrvačnosti válce a koule užitím určitých integrálů. Představme si, že válec je složen z tenkých prstenců o tloušťce dx, hmotnost každého je md = πx. dx / πr a poloměr je x. Tento poloměr se mění od nuly do r a výsledný moment setrvačnosti zjistíme integrací momentů setrvačnosti těchto tenkých prstenců: (C6) integrate(*pi*x/(pi*r^)*m*x^,x,0,r); m r (D6) ---- r 0 π x Tedy m x dx= 1 π r mr. Když známe moment setrvačnosti válce, můžeme ho využít k výpočtu momentu setrvačnosti koule. Představme si, že koule je složena z tenkých plátků (jako když krájíme salám) o tloušťce dx. Každý plátek je malý válec o poloměru y= r x setrvačnosti dj = 3 8 y r 3 a výšce dx. Jeho hmotnost je dm = π y 4 3 π r3 dx a moment y dx. Integrací těchto příspěvků získáme výsledek. - 14 -
(C7) y(x):=sqrt(r^-x^)$ (C8) integrate(3/8*y(x)^4*m/r^3,x,-r,r); m r (D8) ------ 5 r 3 Tedy J = r 8 y r 3 y dx = r r 3 r x dx = 8 r 3 5 m r. Všimněte si, že jsme při výpočtu pomocí Maximy vhodně využili substituci a tím zjednodušili zadání vlastního příkazu pro integraci. V případě neurčitého integrálu Maxima nezobrazuje integrační konstantu. Musíme si ji pohlídat sami. Zkusme integrovat vztah pro rychlost rovnoměrně zrychleného pohybu. (C9) v(t):=a*t+v0; (D9) v(t) := a t + v0 (C10) integrate(v(t),t); a t (D10) t v0 + ---- Pokud místo příkazu integrate použijeme 'integrate s apostrofem, bude se integrál místo výpočtu zobrazovat. (C11) integrate(v(t),t); / [ (D11) Závěrem I (v0 + a t) dt ] / Ukázali jsme si jen malou část příkazů a možností systému počítačové algebry Maxima. Jednak proto, že čas vyhrazený pro seminář je krátký, jednak proto, že metody a z nich plynoucí příkazy dalece přesahují učivo středoškolské matematiky. Proč jsem napsal tento text V uplynulých třech letech jsem jako certifikovaný lektor volitelného modulu ICT ve výuce matematiky školení SIPVZ 7 úrovně P 8 seznámil více než šedesát učitelů matematiky základních a středních škol s obsluhou a využitím software pro podporu výuky matematiky, konkrétně s programy Cabri Geometrie II Plus, Derive 6, Excel a Imagine Logo. 7 SIPVZ státní informační politika ve vzdělávání. 8 Úroveň P (poučený uživatel) dosáhne pedagogický pracovník, který absolvuje povinný úvodní modul a dva volitelné moduly z nabídky speciálně informatických a předmětových modulů. - 15 -
Uvedené programy kolegy velmi zaujaly. Všichni by je rádi ve výuce alespoň občas používali, ale problém právem viděli ve finanční náročnosti licencování uvedeného software jak pro školu, tak pro žáky (pokud by měli s pomocí počítače vypracovávat domácí úkoly). Protože jsem příznivcem operačního systému Linux a Open Source Software, rozhodl jsem se vytipovat programy podobného zaměření, jejichž licence je pro školu i žáky zdarma, a připravit semináře určené určené učitelům matematiky a fyziky, kteří chtějí učit své předměty moderně a dát svým žákům k dispozici výkonné nástroje k rozvíjení matematických představ a řešení náročnějších fyzikálních a technických problémů. Tak vznikl třídílný cyklus seminářů s názvem Open Source Software ve výuce matematiky a fyziky a tři stejnojmenné brožurky s jednoduchým popisem ovládání a možností využití jednotlivých programů: OSS ve výuce matematiky a fyziky 1 Interaktivní geometrický náčrtník Geonext OSS ve výuce matematiky a fyziky Systém počítačové algebry Maxima OSS ve výuce matematiky a fyziky 3 Tabulkový procesor OpenOffice.org Calc a editor vzorců OpenOffice.org Math - 16 -