kill(all);

# MAXIMA

Maxima on sümbolarvutuspakett. Maxima arendati Macsyma sümbolarvutuse süsteemist, 
analoogiliselt kommertstarkvaradele nagu näiteks Maple ja Mathematica. Maxima on vabavara
ja seda kasutavad oma sümbolarvutuste jaoks suuremad süsteemid nagu näiteks SAGE ja EULER.
Keele süntaks on programmile Maple väga lähedane, puuduseks on vast kasutaja konsool ja
kasutusmugavus, mida ei ole veel nii kaua arendatud kui näiteks Maple ja Mathematica jaoks.
Samas arendatakse projekti iga aasta edasi ja lootust on ka kasutusmugavuse vallas 
(kasvõi näiteks kolmandate süsteemide kasutamisel, näiteks SAGE kasutajakonsool jne).

Sümbolarvutuse üheks eeliseks on arvutustäpsuse hoidmine vajalikul tasemel. Näiteks
ratsionaalarv 

2/3;

jääb ratsionaalarvuks kogu arvutuste vältel. Analoogiliselt võib defineerida mingi konstandi,
mida käsitletakse arvutustes kui sübolit ja mida ei asendata arvulise väärtusega vahepealsetes
tehetes (vajaduse korral võib ise valida, mis hetkel väljastatakse arvuline, mis hetkel analüütiline
kuju). Näiteks suudab sümbolarvutuspakett leida singulaarse integraali (eeldades et 0<nu<1)

'integrate((t-s)**(-nu),s,0,t);

assume (nu<1,nu>0,t>0)$

I:integrate((t-s)**(-nu),s,0,t);

Leitud väärtuse I saab enamasti kuitahes täpselt arvutada, asendades nu ja t väärtused. Samal ajal võivad 
arvutuspaketid jääda sellist tüüpi integraalide leidmisel hätta, sest et arvutuspaketid kasutavad tavaliselt 
mõnda kvadratuursummat ja sellisel juhul tuleb diagonaali s=t lähedal arvutada väärtusi (t-s)**(-nu) ja 
see tingib arvutustäpsuse kadu. Praktikas tuleb seega valida, kas kasutada täpsemat kuid oluliselt 
aeglasemat sümbolarvutuspaketti või ebatäpsemat kuid oluliselt kiiremat arvutuspaketti. Näiteks võib 
Fortraniga kirjutatud programm leida vastuse sadu ja tuhandeid kordi kiiremini kui Maximaga kirjutatud 
programm, teisalt võtab Fortrani kirjutamine palju aega ja lisaks võivad kuhjuda arvutusvead. Ilmselt annab
parima tulemuse sümbolarvutus- ja arvutuspakettide omavaheline kombineerimine. Täpsemalt tuleme arvutusaegade 
juurde mõnes eelolevas praktikumis.  

WxMaxima on kasutajaliides Maxima käsurea versioonile. Neid liideseid on veel
teisigi (näiteks TeXmacs).

## WxMaxima dokument

Dokument koosneb erinevat liiki plokkidest, nn "CELL" (vasakul ekraanil asuvad
kandilised sulud taolise ploki eraldamiseks). 

Kasutada saab erinevaid plokke, näiteks dokumendi pealkirja, teksti, peatüki
plokid jne.

Kõige tähtsam on käsurida (Input Cell). 

/* Kommentaarid käsurea sees asuvad tärni ja kaldkriipsu vahel */

/*example Maxmima code: */

print("Hello, world!")$
integrate(x^2, x);

Käsurea jaoks on järgmised valikud:

F5            : Uue käsurea lisamine. Käsurida saab ka lisada, kui klikata regioonide vahel ja hakata kirjutama.

Shift + Enter : Aktiivse käsurea arvutamine (kui ei ole seadistatud ainult Enter klahvi vajutusele).
                Kui seadistus on selline, et Enteri vajutamisel arvutatakse käsurida, siis käsurea
                sees saab rida jätkata kombinatsiooniga Shift+Enter. Kui arvutamine on seadistatud
                Shift+Enteri peale, siis saab rida jätkata Enteriga.

Ctrl + R      : Kõikide käsuridade arvutamine.

;             : Käsurea lõpus peab olema semikoolon või dollarimärk. Kui see puudub, siis Maxima lisab selle ise.     
$             : Dollarimärgi korral väljundit ei kuvata.
           

abi:expand( (a+b)^40 )$

abi;

Plokke saab valida hiire abil, töötab klassikaline lõika, kopeeri ja kleebi meetod (menüüd Edit ja Cell).
Terve ploki saab kustutada, kui klikata vasakul sulgude piirkonnas ja vajutades "Delete" või "Backspace".

Salvestamiseks sobib klassikaline Ctrl + S. Kui failis on muudatusi ja neid ei ole veel salvestatud,
siis üleval Windowsi riba peale ilmub faili nime juurde tärn.

Tekstiploki saab lisada F6 abil.

Ploki saab peita või kuvada, klikates vasakul sulu ülemises kolmnurgas.

Käskude lisamiseks on võimalik kasutada menüüdes toodud kiirkäske. Näiteks sin(x) kolmanda tuletise leidmiseks
saab valida menüü Calculus/Differentiate ... ja hüpikaknasse tuleks kirjutada sin(x), x, ja 3.

diff(sin(x),x,3);

Käskude nimekirja saab vaadata näiteks nii: klikata sõnal või kirjutada mõned esitähed ja 
vajutada "Ctrl" + "Shift" + "K". Abimenüü avaneb tervikuna F1 abil.

Maxima numerdab käsuread ja väljundread. Neid ridu on võimalik kasutada muutujatena, näiteks
võtame tuletise eelmisest väljundist

diff(%o9,x,1);

%i8;%i9;

Pidage silmas, et ridade numeratsioon muutub iga käsurea arvutamisega ja kuskil eespool mingit rida
muutes saavad uued numbrid ka muudetud reale järgnevad käsuread. Seega vastavate ridade muutujatena kasutamisel
peab olema tähelepenelik.

Fail laiendiga "wxm" salvestab ainult sisendread, fail laiendiga "wxmx" salvestab ka väljundread.

## Ülevaade lihtsamatest käskudest

Muutuja väärtuse saab vabastada käsuga "kill". Kõikidelt muutujatelt saab väärtuse tühistada (ja
vabastada mälu) käsuga kill(all). Kasulik on seda käsku kasutada iga töölehe alguses.

kill(all);

Erisümbolid:

%pi   : pii
%e    : e
exp(x): e astmes x, analoogiline programmiga Maple
%     : viimase väljundi väärtus, analoogiline programmiga Maple 
%i    : imaginaararv

%pi; %e; exp(x+y);(3+4*%i);

Arvutamine. Murrud ja avaldised jäetakse arvutamata seni, kuni palutakse need viia ujukomaarvudeks.

3/4; 3.34534534/-5.23412*X;

FLOAT käsk arvutab evaldise arvulise väärtuse masina ujukomaarvu "double precision" kujul. Vaikimisi
on kasutada 17 tüvenumbrit. Sama tulemuse saab, kui rea lõppu lisada "numer". Antud käske saab
rakendada ka mitmele reale või vektorile korraga.

sqrt(2 * %pi)=float(sqrt(2 * %pi));

sqrt(2 * %pi),numer;

BFLOAT käsk viib avaldise Maxima enda numbriformaati. See lubab kasutada rohkem tüvenumbreid (saab muuta käsuga
fpprec), kuid arvutused tulevad aeglasemad.

fpprec:6000; bfloat(sqrt(2 * %pi));

Omistamised toimuvad ebatüüpiliselt kooloni abil. Veidi kummaline lähenemine on, et funktsioonid seevastu tuleb
omistada kooloni ja võrdusmärgi abil (nagu programmis Maple kõikide omistamiste jaoks).

a:45$ A:36$

a;A;

Nagu näha, teeb Maxima vahet suur- ja väiketähtedel. Muutujate nimed ei tohi alata numbriga, küll aga võib neid 
kasutada nime sees. Nimedes ei tohi kasutada tühikuid, selle asemel on soovitav kasutada alakriipsu (nii nagu
programmis Maple).

Uus muutuja:45;

Uus_muutuja:45;

Võrrandeid saab lahendada käsuga solve.

kill(all)$ solve(a*x^2 + b*x + c = 0, x);

Diferentseerimine:

DIFF(avaldis, muutuja , järk)

' märk hoiab ära kohese arvutamise. Seda läheb vaja analüütiliste avaldiste jaoks.

f(x,y) := x^2+y;
diff(f(x,y), x , 2);
g(y) := sin(y);
g(f(x,y));
diff( g(f(x,y)) , x);

'diff(%e**x*y,x);

Nagu märkasite, kasutab Maxima funktsioonide defineerimisel inimesele naturaalset meetodit, s.t. funktsiooni nime
koos muutujatega võib kirjutada omistamisest vasakule poolde. Selline võimalus on näiteks Maple's keelatud.

Graafikud:

wxplot2d([sin(x), cos(x)], [x,0, 2*%pi]);
wxplot3d( exp(-x^2 - y^2), [x,-2,2],[y,-2,2]);

Diferentsiaalvõrrandi lahendamine:

y''(t) + omega^2 * y(t) = 0

assume(omega > 0);
ode2( 'diff(y, t, 2) + omega^2 * y = 0, y, t );
ic2(%, t = 0.5, y = %pi, 'diff(y,t) = 0 );

Lihtjadad:

jada:[1,4,x+y,a,b];

jada[1];jada[4];

jada2:makelist(i**3,i,-2,45); jada2[1];

sort(jada);

length(jada2);