Strona główna » Poradniki » Maxima » Własne funkcje
f( )x
 

Własne funkcje

Na początek

Napiszmy funkcję, która pozwoli nam obliczyć n-tą potęgęliczby 2 i od razu ją wywołajmy:

(%i2)npotega2(n):=2^n;
npotega2(10);
(%o1)npotega2(n):=2^n;
(%o2)1024

oraz przyjrzyjmy się funkcji, która pozwoli obliczyć b-tą potęgędowolnej liczby x i też od razu ją wywołamy:

(%i4)npotegax(x,n):=x^n;
npotegax(3,3);
(%o3)npotegax(n):=x^n;
(%o4)27

Jest to przykład najprostszej funkcji możliwej do napisania. Definiowanie takiej funkcji składa się z podania nazwy funkcji, określenia w nawiasach okrągłych jakie argumenty przyjmuje, zastosowania symbolu przypisania Z:= oraz wyrażenia do obliczenia.

Instrukcje warunkowe

Załóżmy teraz, że interesuje nas, która liczba jest większa. Chcąc otrzymać wynik potrzebujemy instrukcji warunkowej, która nam sprawdzi i zwróci odpowiednią wartość.

(%i6)zwrocWieksza(a,b):=block(if(a>b) then return(a), return(b));
zwrocWieksza(4,5);
(%o5)zwrocWieksza(a,b):=block(if(a>b) then return(a), return(b));
(%o6)5

Po raz pierwszy stosujemy tutaj funkcję block, która określa, że wprowadzamy ciąg instrukcji. block() w nawiasach okrągłych przyjmuje instrukcje oddzielone przecinkiem. Podany przykład wprowadza instrukcję if([...])then [...], która jest instrukcją warunkową. W nawiasy okrągłe wpisujemy warunek, tutaj a > b. Po then możemy wykonać dowolną instrukcję lub wstawić kolejny block. W naszym przypadku używamy return([...]), aby zwrócić wartość podaną w nawiasach okrągłych. Warto nadmienić, że return przerywa wykonywanie bloku, dlatego jeśli a jest większe od b to zwracamy a i kończymy block. Jeśli a jest nie większe niż b to wykonujemy block dalej czyli zwrócimy b.

Wartości tekstów

Maxima to program matematyczny, ale potrafi też wypisywać na ekran teksty. Przypuśćmy, że chcemy wiedzieć czy liczba jest dodatnia:

(%i7)czyDodatnia(a):=block(if(a>0) then return("TAK"), return("NIE"));
czyDodatnia(5);
(%o7)czyDodatnia(a):=block(if(a>0) then return("TAK"), return("NIE"));
(%o8)TAK

W tym przykładzie ponownie posłużyłem się funkcją block i if. Jednak w tym przypadku return nie zwraca liczby, a wartość tekstową, która musi być opatrzona w cudzysłowy "".

if if if (prawda) then what ?

Przy definiowaniu funkcji wolno nam użyć funkcji if instrukcja po instrukcji. W ten sposób możemy zadeklarować funkcję signum.

(%i10)sgn(a):=block(if(a>0) then return(1), if(a=0)then return(0), return(-1));
sgn(4);
(%o9)sgn(a):=block(if(a>0) then return(1), if(a=0)then return(0), return(-1));
(%o10)1

Jeśli to lub to

Instrukcja if pozwala używać symboli operacji logicznych takich jak: spójnik i and, spójnik lub or, albo negacje not. W ten sposób możemy sprawdzić czy któraś z podanych liczb jest większa od 0 używając zaledwie dwóch instrukcji.

(%i11)czyJakasDodatnia(a,b):=block(if(a>0 or b >0) then return("TAK"), return("NIE"));
czyJakasDodatnia(-4,5);
(%o11)czyJakasDodatnia(a,b):=block(if(a>0 or b >0) then return("TAK"), return("NIE"));
(%o12)TAK

Zadania

Napisz poniższe funkcje i przetestuj:

  1. Napisz funkcję czescDodatnia(a), która zwróci część dodatnią liczby a
  2. Napisz funkcję czyRowne(a, b), która sprawdzi czy liczby a i b są równe
  3. * Napisz funkcję pomiedzy(x, a, b), która sprawdzi czy liczba x leży w zbiorze domkniętym [a, b]