Adattipusok, algebrai m veletek > restart; Alapállapotba hozza a rendszert, minden definiált változót, eljárást töröl.
Kifejezések, parancsok Minden kifejezést, parancsokat el kell választani, le kell zárni: ";"-vel lezárt parancs outputja kiiratásra kerül: > 1+1; ":"-tal lezárt parancsot végrehajtja, de az outputot letiltja: > 1+1: kifejezéseket ","-vel el lehet választani > 1+2, 3+5, 7-16; egy parancssorban megadhatunk több parancsot, egy hosszú parancs több soros is lehet > 1+2; 3+5; 7-16; shift+enter nyit új sort > 2+ 3; Több parancsot egy végrehajtási csoportban foghatunk össze. Ekkor egy enter leütésével az összes parancs egymás után végrehajtódik. > 1+2; > 3+5; > 7-16; Az el z leg végrehajtott parancs outputját a % jelöli: > %^2; Értékdás szintaxisa: > a:=%+1; a+10; >
Aritmetikai kifejezések, m veletek röviden összefoglalva: a szokásos jelölések > 1+2; 2-5; 5*8; 24/3; hatványozás: > 2^3; 2**3; faktoriális számolás: > 4!; 0!; > (-1)!; Megjegyzés: a faktoriális m veletet (függvényt) nem csak egész számokra lehet definiálni. > 1.5!; > evalf(1.5!); >
Egyszer adattípusok Page 1
Egész számok (integer) A Maple 32 bites gépeken maximum 219 − 19 = 524279 számjegy hosszú egész számokkal képes dolgozni. > 17777456789*87685865; > 1000!; Az el bbi szám hossza: > length(10000!); > length(2^(2^20)); A whattype paranccsal visszakaphatjuk egy kifejezés típusát. > whattype(-3); > Egész számokkal kapcsolatos függvények egész számok hányadosának egész része: > iquo(17,4); egész számok osztásának maradéka: > irem(17,4); abszolút érték függvény: > abs(-5); el jel függvény: > sign(5),sign(0),sign(-2); prímszám tulajdonság ellen rzése: > isprime(2007); isprime(2011); egész számok prímtényez s felbontása: > ifactor(2007); ifactor(23475872); sorrendben valahanyadik prímszám: > ithprime(1);ithprime(2);ithprime(3);ithprime(100); megadott egész szám után következ els prímszám: > nextprime(2011); > prevprime(2011); > prevprime(2); két vagy több szám legnagyobb közös osztójának kiszámítása: > igcd(24,36);igcd(26,172,33); két vagy több szám legkisebb közös többszörösének kiszámítása: > ilcm(23,36);ilcm(26,172,33); binomial(n,k) : "n alatt a k " binomiális együttható kiszámítása > binomial(4,2); >
Racionális számok (fraction) A racionális számokat külön adattípusban tárolja a Maple: > 234/24; > 3/4, whattype(3/4); A Maple a racionális számokat magától egyszer síti, és azt is biztosítja, hogy a nevez Page 2
pozitív legyen. > 12/(-1*60); Az op függvénnyel a kifejezések operandusait (részkifejezéseit) kaphatjuk meg, a nops függvény pedig az operandusok számát adja meg: > op(3/4); > nops(3/4); Az op paranccsal visszakaphatjuk egy kifejezés valamelyik részkifejezést is külön. Például egy racionális szám számlálóját (els részkifejezés): > op(1,3/4); A nevez pedig a második részkifejezés: > op(2,3/4); >
Valós számok (lebeg pontos számok, float) A Maple minden tizedespontot tartalmazó számot lebeg pontos számnak tekint, és a továbbiakban így is számol vele. Gondoskodik a szükséges automatikus típuskonverziókról is. Ha egy aritmetikai m velet egyik tagja lebeg pontos, akkor a kifejezés eredménye lebeg pontos szám lesz. > whattype(1.); > 123/57; 123./57; A valós számokat tizes számrendszerbeli normál alakban tárolja a Maple: > op(0.12); > op(0.007768766575475486); A lebeg pontos aritmetika pontosságát a Digits rendszerváltozó értéke határozza meg: > Digits; > a:=123./57; > Digits:=20; > a; a:=123./57; > restart; Digits; Valós számként értékeli ki a megadott kifejezést az evalf függvény: > evalf(34/47); Az evalf második paraméterében megadhatjuk a kiértékelés pontosságát: > a:=evalf(23/62,125); > a; > a^2; > evalf(a^2,30); > Valós számokkal kapcsolatos függvények A szokásos matematikai függvények: ex exponenciális függvény: > exp(1.); ln( x ) e alapú logaritmus: > log(2.), ln(2.); logb( x ) b alapú logaritmus: > log[10](100.);
Page 3
> log[2](32.); x négyzetgyök függvény > sqrt(25.); x abszolút érték > abs(-5.3); el jel függvény: > sign(-3.7); > min(2.5,6,-34,345); > max(2.5,6,-34,345); kerekítések > round(2.4),round(2.5),round(2.6); > trunc(2.4),trunc(-2.6),trunc(2.6); > floor(2.4),floor(-2.6),floor(2.6); > ceil(2.4),ceil(-2.6),ceil(2.6); > frac(2.4),frac(-2.6),frac(2.6); trigonometrikus függvények: > sin(0),cos(0),tan(0),cot(1.); trigonometrikus függvények inverzei: > arcsin(1),arccos(1),arctan(1),arccot(1); hiperbolikus függvények: > sinh(0),cosh(0),tanh(0),coth(1.); hiperbolikus függvények inverzei: > arcsinh(0),arccosh(2.),arctanh(0),arccoth(2.); >
szimbolikus változónév (symbol) matematikai változók, programozási változók nevei külön adattípus a Maple-ben: > > > > > > >
restart; x^2; (x-y)^3; whattype(x); x:=2; whattype(x); x:='x'; x; whattype(x);
>
Komplex számok Az i képzetes egysége (i2 = −1) jele az I konstans a Maple-ben. > I^2; > I:=3; > z1:=3+2*I; z2:=-5+4*I;
Page 4
> whattype(z1); op(z1); Látható tehát, hogy a komplex számokat nem külön adattípusként tekint a Maple, hanem egy formális összegként, amelynek két tagja van. Másrészt a komplex számokkal végezhet aritmetikai m veleteket elvégzi: > z1+z2; > z1-z2; > z1*z2; > z1^3; > 1/z1; > z1/z2; az evalf paranccsal lehet az eredményt numerikusan kiszámítani: > evalf(z1/z2); valós illetve képzetes rész kiszámítása: > z1;Re(z1);Im(z1); komplex szám hossza/abszolút értéke: > abs(z1); sqrt(Re(z1)^2+Im(z1)^2); komplex szám konjugáltja: > z1;conjugate(z1); komplex szám argumentuma: > argument(z1); > argument(I); > argument(-4); Minden beépített matematikai függvényt komplex függvényként kezel: > sqrt(-4); > log(-4.); > cos(I); evalf(%); > sin(z2); evalf(%); Alapvet en kétféle megadási módját kezeli a Maple a komplex számoknak. Eddig a kanonikus alakkal dolgoztunk, de lehet ségünk van áttérni a polárkordinátás (trigonometrikus) alakra. Visszatérni az evalc utasítással tudunk > readlib(polar); polar(12-5*I); ecalc(%);
Intervallum Maple parancsokban sokszor használunk ú.n. intervallum jelölést: > a:=1..5; > whattype(a); Az intervallum adattípusnak két része van, az intervallum kezdete és vége: > op(a); > op(1,a); Page 5
> op(2,a); >
Karakterláncok, stringek Egy Maple string maximális hossza 32 bites gépen 524271 karakter. > szoveg:="Ez egy szöveg."; > whattype(szoveg); karakterlánc hosszát a length paranccsal kaphatjuk vissza: > length(szoveg); konkatenálás: > "abcd"."efgh"."ij"; > "Példa: ".szoveg; Ha egy változó névvel kezdjük a konkatenálást, akkor nem helyettesíti be a szöveget: > szoveg." abcde"; A konkatenálást a cat függvénnyel is végrehajthatjuk: > cat("abc","def","gh"); > cat(szoveg,szoveg); String részstringjét visszakaphatjuk intervallumot (vagy egy pozitív egészet) megadva indexként: > szoveg; szoveg[5]; szoveg[1..4]; szoveg[5..10]; > substring(szoveg,1..4); substring(szoveg,5); keresés stringen belül: kisbet -nagybet nem számít > searchtext("ez",szoveg); itt a kisbet -nagybet számít, így nincs találat > SearchText("ez",szoveg); konvertálások: > convert(23,string); > convert(270/25,string); > convert(sqrt(3.),string); > sprintf("%d",234); > sprintf("%1.15f",sqrt(3.)); > sscanf("234","%d"); op(%); >
Beépített konstansok logikai értékek: > true; false; > 1=2; > whattype(1=2); > a:=evalb(1=2);
Page 6
> b:=true; > ((not a) and b) or a; infinity jelöli a végtelen matematikai szimbólumot. A vele kapcsolatos m veletek is definiáltak: > infinity; > infinity+14; > (-3)*infinity; > infinity+infinity; > infinity-infinity; > infinity/infinity; > 0*infinity; π konstans: > Pi; > evalf(Pi,100); > pi;tau;omega;Omega; i képzetes egység > I^2; >
Összetett adattípusok > restart;
Sorozat (expression sequence) Tekintsünk Maple kifejezések vessz vel elválasztott véges sorozatát: > sorozat:=1/2, 5, Pi, 4.5,"kjh hj", x; > whattype(sorozat); Mint láthatjuk, a sorozat egyes elemei különböz típusúak lehetnek. A sorozat meg rzi az elemek sorrendjét, elemek ismétl dhetnek benne. A sorozat egyes tagjait illetve részsorozatait lekérdezhetjük: > sorozat[2]; sorozat[6]; > sorozat[2..4]; Sorozat egyes tagjait értékadásal nem lehet módosítani: > sorozat[3]:=1; Az op és az nops parancsokat sorozat típusra nem lehet kiadni: > op(sorozat); > nops(sorozat); Sorozatot könnyen lehet b bíteni: > sorozat:=sorozat,33,-2.5; Sorozat elejére is beszúrhatunk új elemeket: > sorozat:=-1,sorozat; Közbüls elemet ki lehet cserélni a következ módon: > sorozat:=sorozat[1..2],"abcd",sorozat[4..9]; Üres sorozat létrehozása: > s:=NULL; whattype(s); üres sorozatot b vítsük lépésenként: Page 7
> s:=s,1; whattype(s); Ebb l látszik, hogy 1 hosszú sorozatot nem sorozatként kezel a Maple. > s:=s,2; whattype(s); > s:=s,3; whattype(s); Sorozat generálására a seq függvényt használhatjuk: > seq(i^2,i=1..10); > seq(1+i*x,i=1..10); >
Lista (list) Egy sorozatot szögletes zárójelek közé téve listát kapunk: > lista:=[3,x,false,-5.1,2]; Egy lista egyes elemeit ugyanúgy érhetjük el, mint a sorozatoknál: > lista[3]; lista[2..4]; Lista elemei módosíthatók értékadással: > lista[3]:=2; lista; Az op parancs listából sorozatot konvertál (sorozatként adja vissza a lista részeit): > op(lista); A lista hosszát az nops paranccsal kaphatjuk meg: > nops(lista); Hozzáf zés a lista végéhez: > lista; lista:=[op(lista),"fgh"]; Lista 4. tagjának módosítása: > lista:=[op(lista[1..3]),0,op(lista[5..6])]; Kereshetünk egy elemet a listában: > member(x,lista); A következ szintaxissal azt is viszakapjuk a hol nev változóban, hogy melyik a keresett elem indexe: > member(x,lista,'hol'); hol; A map paranccsal egy lista minden elemére végrehajthatunk egy függvényt, a visszaadott érték lista lesz: > map(exp,[0,1,2,3]); > evalf(%); >
Halmaz (set) Halmaz definiálása: > halmaz:={5,1,x,11,Pi,-9}; > whattype(halmaz); Page 8
Egy halmazban egy elem csak egyszer fordulhat el , az elemek sorrendje nem definiált. Az elemeket egyesével vissza lehet kapni: > halmaz[2]; Az op, nops és a memeber parancsok alkalmazhatóak halmaz adattípusra is: > op(halmaz); nops(halmaz); member(11,halmaz); Halmazm veletek: unió, metszet és különbség képzés: > halmaz; halmaz2:={1,7,Pi,y}; halmaz union halmaz2; halmaz intersect halmaz2; halmaz minus halmaz2; A map paranccsal a halmaz minden elemére végrehajthatunk egy függvényt, az eredmény a függvényértékeket tartalmazó halmaz: > map(sin,{0,x,Pi/2}); >
Tömb (array) A Maple-ben léteznek egy-, két- és többdimenziós tömbök, mint adatstruktúrák. > tomb:=array(1..4); > whattype(tomb); A tömb elemeire lehet hivatkozni akkor is, ha még nincs értékük. > tomb[3]; A tömb elemeinek egyenként is adhatunk értéket. > tomb[1]:=13; A tömb elemeinek már a deklarációban is adhatunk értéket: > t1:=array([11,22,33,44]); Ha nem adjuk meg az indexhatárokat, a Maple a lista hosszából megállapítja ezeket azt feltételezve, hogy az indexhatárok 1-gyel kezd dnek. Használhatunk negatív és 0 indexeket is: > t2:=array(-2..2,[0,1,2,3,4]); > t2[-1]+t2[0]; Kétdimenziós tömb létrehozása. A következ tömbnek 5 sora és 3 oszlopa van, a tömb elemeit sorfolytonosan adjuk meg. > b:=array(1..5,1..3,[[0,1,7],[0,2,4],[0,3,6],[1,4,8],[0,5,1 0]]); > b[3,2]; A Maple általában minden kifejezést teljesen kiértékel. Ez alól kivétel pl. a tömb: > b; > whattype(b); Az eval paranccsal ebben az esetben is kiértékelhetjük a kifejezést: > eval(b); > whattype(eval(b)); Array tartalmát a print paranccsal is kiirathatjuk: > print(b); Page 9
> Tábla (table) A tábla hasonlít más programozási nyelvek rekord adatsruktúrájára. A tábla indexei nem csak integer típusú számok lehetnek, lehet például szöveg is. > kocka:=table([oldalhossz=[a,m], felszin=[a^2,m^2], terfogat=[a^3,m^3]]); A tábla adott elemének kiválasztása vagy megváltoztatása a [] szelekciós operátorral történhet. > kocka[felszin]; > kocka[oldalhossz]:=5; > print(kocka); >
Szimbolikus számolás A Maple szimbolikusan számol, ezért, ha a felhasználó másként nem kéri, numerikusan nem értékeli ki a kifejezéseket. Erre az els példa, hogy egész számok osztását tört alakban adja vissza: > (123+235)/982; Egész számok gyökeit is csak jelöli, nem numerikusan számol velük: > a:=sqrt(3); Az eredmény egy hatvány: > whattype(a); op(a); Az a változó a gyökvonás pontos értékét tartalmazza: > a^2; > b:=root[3](5); b^6; Abban az esetben, amikor a gyökvonás eredménye pontosan megadható, kiszámítja a gyököt: > sqrt(25/36); Az elemi függvények értékét sem számítja ki automatikusan: > sin(1); Abban az esetben, ha az eredményt szimbolikus alakban ismeri a Maple, a pontos értéket behelyettesíti: > sin(Pi); > sin(Pi/2); > log(1); > arctan(1); > cos(Pi/12); > cos(Pi/24); Természetesen, ha valós értékkel hívjuk fel a függvényt, akkor numerikusan értékeli ki a függvényt: > cos(2.); > Page 10
Automatikus egyszer sítés Egy másik jellemz tulajdonsága a Maple-nek, hogy a kifejezéseket megpróbálja automatikusan egyszer síteni. Ezt az alábbi esetekben tapasztalhatjuk:
Aritmetikai kifejezések Az aritmetikai m veleteket végrehajtja, azok eredményeit automatikusan behelyettesíti: > a:=(123-213)*(2/3); > (2-5)^3*x;
Racionális számok egyszer sítése > 34528/460;
Szorzatok átrendezése a numerikus tényez ket kiszámolja, és a numerikus együttható lesz az els > x*2; > 4*y*(-2)*x;
Azonos tagok összevonása > 8*x-6*x*y+23*x-4*y*x; > 4*x*x*x-y*3*y;
Disztributivitás azonossága konstanssal való szorzás esetében > 3*(x-y); > (y-3*x)*12; Ha a szorzótényez nem konstas, akkor nincs automatikus beszorzás: > x*(x+y);
Algebrai törtekben a közös szorzótényez vel automatikusan egyszer sít > A:=((x+1)*(x-2))/((x+5)*(x-2)); Ha ugyanezt a törtet vesszük, csak nincs szorzattá alakítva a nevez és a számláló, akkor nincs automatikus egyszer sítés, mert a szorzattá alakítást nem hajtja végre automatikusan. > B:=(x^2-x-2)/(x^2+3*x-10);
Elemi függvények értékei kiszámítása Abban az esetben, ha a függvényértékre van beépített azonosság, akkor azt automatikusan használja: > 5-cos(0); Page 11
> sin(Pi/4)^2; >
Teljes kiértékelés > restart; Egy változó algebrai kifejezést is tartalmazhat: > F:=m*a; > F; Nézzük meg F típusát és részkifejezéseit: > whattype(F); op(F); Adjunk algebrai kifejezés értéket az m változónak is: > m:=x+y+z; > whattype(m); op(m); Ha most kiértékeljük az F változót, akkor az m változó helyére automatikusan behelyettesíti annak tartalmát: > F; Ha most x értéket kap, akkor a Maple behelyettesíti azt is az F kiértékelésekor: > x:=4; F; A Maple (interaktív módban) minden kifejezést minden pillanatban teljesen kiértékel, azaz a részkifejezésekben szerepl kifejezéseket rekurzív módon addig értékeli ki, amíg konstans értéket vagy szimbolikus változó értéket nem talál. Az eval paranccsal felül tudjuk írni ezt az automatikus teljes kiértékelési módszert, a második paraméterben azt adjuk meg, hogy hány szinten keresztül értékelje ki az els paraméterben megadott kifejezést: > eval(F,1); > eval(F,2); > eval(F,3); Ha megváltoztatjuk m értékét, F következ kiértékelésekor persze a módosított érték lesz behelyettesítve: > m:=a-z+y; F; Van néhány kivétel a teljes kiértékelés alól. Korábban láttuk, hogy egy tömböt nem értékel ki egy lépésben sem automatikusan a Maple: > t:=array([1,3,5,-6]); > t; Az eval paranccsal felülírhatjuk ezt, alkalmazásával kiértékelhetjük a változó tartalmát: > eval(t); Ilyen automatikus kiértékelés alóli kivétel a tömb mellet a tábla és az eljárás adattípus is. > u:=F; Itt u az F kiértékelésésekor kapott kifejezést kapja értékül: Page 12
> F:=3; u; Ha nem akarjuk, hogy a rendszer kiértékelje az adott kifejezést, akkor szimpla aposztrófok (shift 1) közé rakjuk a kifejezést: > v:='F+x'; F; x; v; > 'F';
Változók nevei A Maple változók illetve eljárások, függvények neveiben megkülönbözteti a kisbet t és a nagybet t. > a:=15; A:=-1; a,A; Változó név bet vel kezd dik, maximum 498 hosszú lehet, számokat és aláhúzás karaktert tartalmazhat alapértelmezésben. > szell :=12; Egyéb karaktereket, többek között szóközt is használhatunk változó nevében, de ekkor ` karakterek (alt gr 7) között kell megadni a változó nevét: > `szell `:=12; > `ez is egy változó`:=222; Változó név generálására használhatjuk a . konkatenálás m veletet. > i:=1; j:=2; a1:="elso"; a2:="masodik"; > a.i; a.j; Látható, hogy itt az a1 és az a2 változó neveket generálta le az el bbi 2 kifejezés. Megjegyezzük, hogy itt az a változó helyére nem helyettesítette be a Maple az értékét (kivétel az általános teljes kiértékelési szabály alól), de már az i illetve j változó tartalmát behelyettesíti a változó nevébe. Hozzunk létre egy sorozatot, és nézzük meg, hogy mit kapunk a sorozat konkatenálásakor: > ind:=1,2,3,4,5; > a.ind; Az eredmény változó nevek egy sorozata, a1, a2, a3, a4, a5, csak az a1 és a2 változók értékeit kiiratáskor automatikusan behelyettesítette a Maple. >
Page 13