Eenvoudige numerieke berekeningen

Numerieke operatoren en precisie

Maple is uiteraard te gebruiken als een rekenmachine. De standaard operatoren '+', '-', '*', '/' zijn gedefinieerd, terwijl '^' voor de machtsverheffing gebruikt wordt (hiervoor is '**' een alternatief, dit ten behoeve van Fortran fans). Een commando in Maple wordt steeds afgesloten met een ';'. Enkele voorbeelden:

> 3.17*11.5/2.1 + 3^2;

26.35952381

> 3/7;

3/7

Zoals uit de bovenstaande voorbeelden blijkt rekent Maple zolang mogelijk symbolisch: 3/7 wordt gerepresenteerd als een breuk, eerder dan "0.4285...". Indien we een numerieke waarde wensen kan dit mbv. 'evalf' (evaluate float):

> evalf(3/7);

.4285714286

Men kan het resultaat van de voorgaande berekening gebruiken in de volgende mbv. '%'.

> evalf(2*%);

.8571428571

Indien men het resultaat van de berekening daarvoor wil gebruiken kan dit met '%%' :

> evalf(3*%%);

1.285714286

Dit werkt enkel tot '%%%', men kan niet verder dan drie stappen terug gaan in de berekening mbv. dit history mechanisme.

Het moet echter opgemerkt worden dat deze manier van werken vaak aanleiding geeft tot onverwachte resultaten, vooral bij het opnieuw uitvoeren van een worksheet.  Een reden hiervoor is dat eigenlijk niet het vorige resultaat gebruikt wordt, maar dat de vorige berekening opnieuw uitgevoerd wordt.

Variabelen en de toekenningsoperator ':='

Hoewel het history mechanisme mbv. '%' soms best handig kan zijn is het veel beter tussenresultaten toe te kennen aan variabelen. De naam van een variabele is een letter, eventueel gevolgd door een combinatie van letters en cijfers. Merk op dat Maple een onderscheid maakt tussen hoofd en kleine letters. Het spreekt vanzelf dat de naam van een variabele niet gelijk mag zijn aan een naam die Maple zelf gebruikt. Een naam zoals 'sin' of 'Pi' is dus uit den boze, let vooral op 'D', dit is namelijk de operator voor differentieren.

Om een waarde toe te kennen aan een variabele gebruikt men de toekenningsoperator ':=' (vgl. met Pascal).

> a := evalf(3/7);

a := .4285714286

> b := evalf(2*a);

b := .8571428572

Indien men de waarde wil kennen die een bepaalde variable heeft vraagt men dit als volgt:

> b;

.8571428572

Wanneer er nog geen waarde toegeked is aan een variabele geeft Maple enkel de naam terug:

> c;

c

Het is een goede gewoonte een variabele weer vrij te geven wanneer men ze niet meer nodig heeft, zo vermijdt men ongewenste neveneffecten:

> a := 'a';

a := a

Het symbool 'a' heeft nu niet meer de numerieke waarden 0.429..., er werd aan 'a' het symbool 'a' toegekend.  Dit blijkt duidelijk door 'a' opnieuw te evalueren:

> a;

a

Hetzelfde effect kan op een elegantere manier bekomen worden door de functie 'unassign' te gebruiken.

> a := 3;

a := 3

> unassign('a');

> a;

a

Meerdere statements op dezelfde regel kan plaatsen om ze sequentieel te laten uitvoeren. Uiteraard moeten ze beeingdigd worden door ';'.

> a := 5; a := 2*a; 3*a;

a := 5

a := 10

30

Het is ook mogelijk statements te scheiden (of af te sluiten) met een ':', de uitvoer van dit statement wordt dan niet afgedrukt. Indien de tussenresultaten niet interessant zijn kan men voorgaande statements beter scheiden door ':', het laatste statement kan men best wel afsluiten met ';', anders krijgt men het resultaat niet te zien.

> a := 5: a := 2*a: 3*a;

30

> a := 'a': b := 'b':

Built-in functies.

Er zijn erg veel functies gedefinieerd in Maple. Er is 'sqrt' voor de vierkantswortel. De trigoniometrische functies zijn uiteraard ook beschikbaar: 'sin', 'cos', 'tan' en 'arcsin'. 'arccos' en 'arctan' voor hun inversen. De constante pi is gedefinieerd als 'Pi'.

> sin(Pi/4);

1/2*2^(1/2)

> arccos(sqrt(2)/2);

1/4*Pi

De exponentiŽle functie 'exp' en de neperiaanse logarithme 'log', evenals de hypergeometrische functies 'sinh', 'cosh' en 'tanh' (inverse functies 'arcsinh', 'arccosh' en 'arctanh') zijn standaard.

> sinh(0.5);

.5210953055

> (exp(0.5) - exp(-0.5))/2.0;

.5210953057

> arcsinh(0.521095);

.4999997291