Prezentare Maple
-
Upload
cristian-mihai-pomohaci -
Category
Documents
-
view
651 -
download
1
description
Transcript of Prezentare Maple
M A P L E – Software pentru calcule matematice
C a p i t o l u l 8
INTRODUCERE ÎN MAPLE
8.1. Ce este Maple ?
8.1.1. Noţiuni generale
Maple este un software specializat în calcule matematice. Posibilităţile lui
cuprind aproape toate compartimentile matematicii contemporane.
Sistemul Maple se foloseşte în regim de dialog interactiv, precum şi prin scrierea
programelor cu ajutorul limbajului său propriu (limbajul Maple), orientat spre calcule
matematice de orice natură. Spre deosebire de limbajele de programare de nivel înalt
(Fortran, Basic, C, Pascal etc.), Maple rezolvă multe probleme matematice doar prin
apelare la comenzi, fără a fi nevoie să se compună programe aparte.
Baza sistemului Maple o constituie nucleul principal – programul transformărilor
simbolice. În plus, Maple conţine câteva mii (peste 3000) de funcţii şi proceduri speciale, care
formează aşa-numitele biblioteci, orientate spre transformările simbolice şi calcule numerice din
diverse compartimente ale matematicii. Maple mai dispune de o grafică puternică şi foarte
uşor de utilizat, de o arhitectură modulară, care permite adăugarea de noi proceduri şi
funcţii.
Programul Maple operează deopotrivă cu numere întregi, fracţionare şi
aproximative, ceea ce-i permite sistemului să returneze rezultatele rezolvării problemei
cu o exactitate ideală (exactitate infinită). Cu Maple soluţia multor probleme poate fi
obţinută nu numai numeric, ci şi sub formă analitică, adică cu ajutorul unor formule.
Din această cauză se mai spune că Maple este un program de matematici simbolice.
92
În zilele noastre Maple cu versiunile sale (Maple V, Maple 6 – 9 şi recenta
versiune Maple 10) este cel mai performant sistem de calcule matematice în stare să
realizeze cele mai complexe proiecte. Maple execută transformări şi simplificări
algebrice complexe; calculează sume şi produse finite şi infinite, limite şi integrale;
rezolvă numeric şi analitic sisteme algebrice (şi transcendente) de ecuaţii şi inecuaţii;
calculează determinanţii matricelor cu elemente simboluri matematice; determină toate
rădăcinile unui polinom; determină numeric şi analitic soluţia sistemului de ecuaţii
diferenţiale ordinare, precum şi a unor clase de ecuaţii cu derivate parţiale etc.
Scrierea unui program în Maple este foarte simplă, fiind vorba doar de aplicarea
unor comenzi formate din termeni uzuali din vorbirea curentă. Complexitatea
programelor şi procedurilor depinde numai de utilizator, deoarece peste 80% din miile
de comenzi Maple sunt de fapt programe Maple. Programele Maple pot fi modificate şi
extinse în aşa mod încât să ofere utilizatorului soluţiile optime ale problemei în cauză.
8.1.2. Fereastră Maple
Lansarea sistemului Maple se efectuează prin comenzi specifice sistemului de
operare pe care este instalat. Vom considera în continuare sistemul de operare
Windows, caz în care lansarea se face prin activarea
• icon-ului Maple sau
• aplicaţiei Maple din directorul în care a fost instalat sistemul Maple.
În urma efectuării acestei comenzi se deschide o fereastră (vezi fig.8.1) în care apare
prompterul „ > ” specific sistemului Maple.
93
Fig. 8.1. Aspectul general al ferestrei sistemului Maple
Sistemul Maple devine în acest fel interactiv, adică la fiecare comandă sau
funcţie tastată şi urmată de „ ; ” sau „ : ” şi, bineînţeles, acceptată de Maple (editarea
comenzii sau funcţiei încheindu-se prin Enter), sistemul o execută şi afişează pe ecran
rezultatul, dacă este cazul.
Fereastra Maple (vezi fig.8.1), la fel ca alte aplicaţii de genul acesta, este o
fereastră Windows şi constă din Titlul ferestrei (pătrăţelul 1) după care imediat urmează
Bara meniului de bază (pătrăţelul 2) care conţine butoanele File, Edit, Wiew, Insert,
Format, Spreadsheet, Options, Window şi Help. Sub bara meniului de bază se află
Panoul instrumentelor de bază (pătrăţelul 3) cu butoane ce repetă cele mai des utilizate
comenzi ale meniului de bază. Un clic pe buton este suficient ca comanda să fie
îndeplinită. Mai jos de panoul de instrumente se află Panoul contextual (pătrăţelul 4)
forma căruia depinde de poziţia cursorului. Câmpul de lucru (pătrăţelul 5) ocupă cea
mai mare suprafaţă a ferestrei interfeţei. Din câmpul de lucru fac parte Foile de lucru
Maple. Interfaţa sistemului Maple este de tipul multe documente şi permite lucrul cu
mai multe foi, care şi formează aşa-numitele Documente Maple. În partea de jos a
ferestrei se află Linia stare (pătrăţelul 6) care are în componenţa sa mai mulţi parametri
caracteristici sistemului Maple, precum şi o scurtă informaţie referitoare la comanda
aleasă sau la butonul panoululi de instrumente.
Meniul de bază, la rândul său, constă din:
• File – comenzi standard pentru operare cu fişiere;
• Edit – comenzi standard pentru redactarea unui text;
• View – comenzi standard de gestionare cu structura ferestrei Maple;
• Insert– inserarea diverselor texte, grafice 2- şi 3-dimensionale;
• Options– stabilirea diverşilor parametri;
• Windows – comenzi pentru a trece de la o foaie de lucru la alta;
• Help – conţine informaţie despre sistemul Maple.
Dialogul dintre utilizator şi sistemul Maple este organizat sub forma unei sesiuni
– utilizatorul introduce solicitările ce ţin de soluţionarea unei probleme (comenzi,
expresii, proceduri) care sunt preluate şi prelucrate de sistem. Informaţia introdusă şi
rezultatele prelucrării ei compun Foaia de lucru care este formată din:
1. domeniul de introducere (înregistrare) – conţine linii comenzi şi începe cu
prompterul ”>”(vezi pătrăţelele 1 din fig.8.2);
94
2. domeniul de afişare – conţine rezultatele prelucrării informaţiei introduse:
expresii analitice, obiecte grafice sau comunicări despre erorile comise (vezi
pătrăţelele 2 ale fig.8.2);
3. domeniul comentariilor text – explică modul de funcţionare al procedurilor.
Informaţia liniei text nu este prelucrată de Maple. O linie comandă poate fi
transformată într-o linie text prin intermediul butonului . Pentru
revenirea la linia iniţială (linia text → linia comandă ) se apasă .
Domeniul de înregistrare a informaţiei şi domeniul de afişare formează aşa-numitul
grup de calcule, care este marcat în stânga de o paranteză pătrată. Un grup de calcule
poate conţine mai multe domenii de înregistrare şi, respectiv, domenii de afişare.
Fig.8.2. Foaie Maple
Ceea ce caracterizează, însă, un grup este că toate instrucţiunile grupului se îndeplinesc
la o singură apăsare Enter, adică toate instrucţiunile domeniului de lucru vor fi
îndeplinite.
95
Fig.8.3. Domeniul de afişare
Exemple
1) Cu ajutorul secvenţei
> 2*5^3/125-x^2*sin(z-Pi)-13/52;
)sin(4
7 2 zx+
# programul a îndeplinit toate operaţiile indicate în expresia înscrisă în linia
stare şi a afişat rezultatul )sin(4
7 2 zx+ . Mai mult, observăm că programul a
făcut şi unele modificări: a simplificat fracţia 4
1
52
13 −=− .
2) Expresia
xx 44 cossin64
48 ++−
poate fi simplificată cu ajutorul comenzii combine( ) după cum urmează
> combine(-48/64+sin(x)^4+cos(x)^4;
( )x4cos4
1
Şi în cazul acestui exemplu sistemul a executat simplificările posibile. Din
96
cursul de trigonometrie se ştie că prin intermediul formulelor
)32cos44(cos8
1sin 4 +−= xxα şi
)32cos44(cos8
1cos4 ++= xxα
rezultă relaţia x4cos4
1
4
3cossin 44 +=+ αα . Programul a efectuat, de
sine stătător, şi a redus termenii, adică xx 4cos4
1
64
484cos
4
1
4
3 =−+ .
Expresiile în Maple dispun nume. Operatorul de atribuire este „:=”. În cazul în
care expresia are un nume poate fi afişat doar numele acesteia.
Exemplu
Să se atribuie expresiei xx 44 cossin52
39 ++− numele C. Acest lucru se
obţine cu
> C:=(-39/52+sin(x)^4+cos(x)^4;
44 )cos()sin(4
3: xxC ++−=
Programul a simplificat fracţia - 52
39. Cu ajutorul comenzii combine( )
programul simplifică expresia 44 )cos()sin(4
3: xxC ++−= , atribuindu-i
un alt nume
> R:= combine(C);
R:= )4cos(4
1x
Acum apelând la R, obţinem rezultatul de mai înainte:
> R;
97
( )x4cos4
1
Acelaşi rezultat se obţine şi dacă
> C := combine(C); C;
C := ( )x4cos4
1
( )x4cos4
1
Maple este un limbaj al expresiilor. Expresiile în Maple conţin operatori sau
caractere speciale, funcţii şi nume de variabile. Expresiile introduse de utilizator se
afişează pe ecran (pe spaţiul de lucru) şi sunt interpretate şi evaluate de instrucţiunile
programului. Instrucţiunile (comenzile) Maple, de cele mai multe ori, au forma
> variabilă: = expresie ;
fiind foarte scurte şi extrem de simple, se mai numesc instrucţiuni-expresie.
Maple mai admite încă un tip de instrucţiuni şi anume instrucţiuni-procedură:
> Nume_comandă (argument, opţiuni);
Numele unei comenzi, de regulă, corespunde menirii acesteia. Astfel, sum
înseamnă sumă, det – determinant, int – integrală, intparts - integrare prin părţi,
max – maximum, select – selecţie, solve – rezolvare, subs – substituire,
inverse – inversă, evalt – evaluare, simplify – simplificare, expr – expresie,
combine – combinaţie, sqrt – radical de ordinul doi etc.
Toate instrucţiunile Maple pot fi consultate. Pentru aceasta este necesar ca după
„?” să urmeze denumirea (chiar şi ipotetică) a instrucţiunii, urmată de Enter sau clic
pe .
După această scurtă expunere a unor comenzi cititorul este invitat să înceapă să
experimenteze cu Maple, să rezolve cât mai multe şi diverse probleme. În felul acesta va
acumula noi cunoştinţe despre sistemul Maple. Totodată, pentru o mai profundă
cunoaştere a programului, este bine să ştim structura acestuia, parametrii instrucţiunilor
şi alte noţiuni legate de acest sistem.
98
8.2. Obiecte Maple
8.2.1. Limbajul sistemului Maple
Ca orice alt limbaj algoritmic de programare Maple constă din caractere,
expresii, sintaxă.
Caracterele limbajului Maple sunt literele mari şi mici ale alfabetului latin,
cifrele arabe şi încă 32 de caractere speciale, dintre care menţionăm: _ , ;, :, -, *, /, ^, !,
=, <, >, (, ), [, ], {, }, « , %, #, ? etc.
Sintaxa cuprinde regulile de înscriere a cuvintelor în propoziţii şi determină
sensul dat de Maple când primeşte o comandă. Dacă comanda, din punct de vedere
sinacsic, nu este scrisă corect Maple semnalizează acest fapt printr-un mesaj de tipul
syntax error, indicând totodată şi locul unde a fost comisă eroarea.
Exemple
> ++7;
Syntax error, `+` unexpected
Sistemul Maple nu admite consecutiv două semne"+". În Maple există mai
multe forme de scriere a numerelor cu virgulă mobilă:
> 3.7e-3, 3.7E-03, +0.0037 ;
.0037, .0037, .0037
> Float(14142, -4) ;
1.4142
> 5.e-4 ;
Syntax error, missing operator or `;`
Scrierea corectă este 5.0e-4 (între punctul zecimal şi sufixul exponential
99
neaparat trebuie să fie o cifră) si returnează .0050
Cuvinte rezervate sau cuvinte-chee în Maple sunt cuvintele cu sensuri
speciale care în programe nu pot fi folosite ca variabile.
Exemple
Iată câteva cuvinte rezervate în Maple:
of, then, else, fi, for, in, by, to, while, do,
od, proc, local, end, option, global, read,
stop, union, minus, or, not şi altele.
Separatori Maple. În Maple pentru separarea uor expresii, comenzi, funcţii
se folosesc spaţiile sau semnele de punctuaţie. Pentru obţinerea spaţiilor între simboluri
(sau expresii) pot fi folosite tastele: Space, Tab, Enter. Spaţiul liber (blank) se obţine
cu ajutorul tastelor Space sau Tab, iar un spaţiu între linii – cu tasta Enter.
Semnele „:” şi „;” se folosesc pentru separarea expresiilor (propoziţiilor). Deosebirea
dintre ele este următoarea: semnul „:” în cadrul unei sesiuni interactive nu permite
afeşarea rezultatului executării operaţiei.
Expresiile precedate de semnul # fac parte dintr-un comentariu (nu influenţează
programul Maple).
Exemple
> x:=y ;
x := y
> x:=y ;
Syntax error, `=` unexpected
Eroarea apare în urma scrierii incorecte: între „:” şi „=” este un spaţiu liber.
Spaţiile libere nu sunt admise în interiorul lexemelor.
> C := 2*t + x*z ; # 11 septembrie 2001 a fost ziua atentatului
sângeros asupra Americii
100
C := 2 t + y z
Tot ce urmează după semnul # nu este luat în considerare de programul
Maple.
Conţinutului unei comenzi poate fi transferat şi în altă linie
dacă se acţionează Shift-Enter.
8.2.2. Obiecte Maple
Expresii. Expresiile sunt noţiunile de bază cu care operează Maple. O expresie
constă dintr-un nume, formule şi diverse tipuri de date. Ordinea executării operaţiilor în
expresie este cea cunoscută în matematica elementară: operaţiile din paranteze, apoi
ridicarea la putere, pe urmă înmulţirea şi împărţirea şi, în sfârşit, adunarea şi scăderea.
În cazul când pentru determinarea ordinii operaţiilor unei expresii există mai multe
sensuri se folosesc parantezele rotunde„(, )”. Maple operează cu numere şi nume unite
între ele cu operatori matematici: + (adunare), - (scădere), * (înmulţire), / (împărţire), ^
(ridicare la putere), @ (compoziţie) etc. Practic, lungimea unei expresii nu este limitată.
Exemple
1) Expresii scrise în Maple precum şi rezultatul acestora afişat pe ecran:
> a – b + c/d;
a - b + d
c
• > 5*t^3 + 2*t^2 – t + 19.37;
5 t3 + 2 t2 - t + 19.37
> x^2/9 - y^2/25;
22
25
1
9
1yx −
2) > 6 + 8*5 - 4 + 16 ;
101
58
> (6+8)*5-4+16;
82
> (6+8)*(5-4)+16;
30
> (a+b+c)/(a*c);
ac
cba ++
Dacă expresia conţine paranteze de prisos analizatorul sintaxic le va omite.
Deseori se confundă x/y*z cu x/(x*y) sau cu (x/y)*z. Rezultatele acestor secvenţe
sunt:
y
xz,
yz
x,
y
xz.
Numere. Cele mai simple obiecte, totodată şi cele mai simple expresii, cu care
operează Maple sunt cele legate de numere, linii şi nume.
Numere întregi şi raţionale. Maple deopotrivă operează cu numere scrise sub
forma zecimală şi cea fraţionară. Numerele întregi sunt succesiuni formate din una sau
mai multe cifre. Cifra zero de la începutul unui număr întreg este neglijată de programul
Maple. Numerele fracţionare au în componenţa lor operatorul de împărţire (/) pentru a
evidenţia numărătorul şi numitorul.
Exemple
> 00059300461254000;
59300461254000
> - 06354129087;
-6354129087
> + 946713248295100;
946713248295100
102
Constante matematice. Printre constantele matematice fac parte:
• Pi – 3,141592653589793238462643…;
• exp(1) – baza logaritmului natural;
• I – 1− (unitatea imaginară);
• infinity – infinit;
• -infinity – minus infinit;
• true, false – constante din algebra Bool, etc.
Posibilitatea exprimării valorilor numerice sub forma lor exactă (de exemplu, 3
1
şi nu 0,33333… ) este un avantaj al algebrei simbolice. De regulă, valorile exacte se
păstrează pe întreg mersul calculelor. În anumite cazuri valorile exacte se transformă în
valori aproximative. Se întâmplă acest lucru atunci când expresiile conţin mai multe
tipuri de date.
Exemple > 2/7 + 5;
7
37
> 2/7 + 5.0;
5.285714286
> Pi/3; Pi/3.0;
3
1 Pi
.3333333333 Pi
103
Linii. Succesiunea formată din caractere de orice natură şi cuprinsă între
ghilimele inverse („`”) poartă denumirea de linie Maple. Imaginea ghilimelelor
corespunde apostrofului. Caracterele speciale ( +, ., / etc ) pot fi parte componentă a
unei linii numai dacă sunt cuprinse între ghilimele, de altfel sunt interpretate ca
operatori.
Exemple
> `Grigore C. Moisil este cel care a pus bazele
informaticii în România`;
Grigore C. Moisil este cel care a pus bazele informaticii în România
> `27x + 5xyz - 3x`;
27x + 5xyz - 3x
Semnele + , - fac parte din componenţa liniei. La fel şi semnul / din exemplul ce
urmează. Este parte componentă a liniei
> ` mat.inv.exist./det.dif.zero`;
mat.inv.exist./det.dif.zero
> 27*x +5*x*y*z - 3*x; # Deoarece expresia nu conţine ghilimele rezultă
că + şi – sunt operatori matematici
24x + 5xyz
> integ.def;
integdef
Nume. Prin nume în Maple se înţelege o linie formată din caractere (a – z, A –
Z), cifre ( 0 – 9) şi semnul _ (spaţiu). Numele, la fel ca numerele întregi, pot avea o
lungime „infinită”. Numele Matematica1 este diferit de numele matematica1. Orice
linie, adică orice secvenţă de semne, luată între ghilimele inverse, poate fi un nume.
Numele indicat de o linie formată din semne permise coincide cu numele format din
aceleaşi semne fără ghilimele. Astfel, `Matematica1` şi Matematica1 este unul şi
acelaşi nume. Ghilimelele inverse permit includerea ghilimelelor în textul unei linii.
Funcţia type deosebeşte nume de tip linie – string şi nume indexate – indexed.
Exemple > 2*m^3 - 3 ;
104
2m3 – 3
> t : = 5 ; t^2 - 9*t + 10;
t := 5
-10
> `ghilimele `` inverse`;`dintr``un număr`;
ghilimele `inverse
dintr`un număr
> length(0), length(147), length(`Maple este un pachet de programe matematice`), length(abc),
length(x+7*x^2+11);
0, 3, 44, 3, 18
> P[3,4], B[i,2*k-3*m-1], M[3][7], aliaj[Fe,Cu][1,2];
P3,4, Bi,2k-3m-1, 73Μ , 1,2CuFe,aliaj ]
> e:=A[1,2]+A[2,1]-a[1,1]*a[2,2];
e := 2,1Α + 1,2Α - a1,1a2,2
Ghilimele. După cum rezultă de mai sus, ghilimelele inverse servesc la crearea
liniilor. Sistemul Maple mai utilizează şi aşa-numitele ghilimele de accentuare.
Pentru a avea acces la rezultatul unei comenzi, acesteia i se va atribui un nume.
Prin urmare, operatorul cuprins între ghilimele drepte, se eliberează de ele la o
introducere. Altfel spus, executarea se va întrerupe la o trecere prin analizatorul
sintactic, adică de fiecare dată când analizatorul sintactic întâlneşte o expresie luată în
ghilimele drepte suprimă partea exterioară a lor.
Exemple
> ''factor(x^3 - 2*x^2 - 3)'';
'factor(x3 - 2 x2 - 3)'
> 'factor(x^3 - 2*x^2 - 3)';
factor(x3 - 2 x2 - 3)
> factor(x^3 - 2*x^2 - 3);
x3 - 2 x2 - 3
105
> ''cos''(Pi) ;
'cos'( π)
> 'cos'(Pi);
cos( π)
> cos(Pi);
-1
Şiruri. Mai multe expresii separate prin virgule formează un şir (o
consecutivitate) de expresii. Majoritatea comenzilor Maple folosesc şiruri de expresii
sub formă de parametri. Modul cel mai simplu de creare a unui şir este introducerea
consecutivă a expresiilor.
Exemple
> 2*a+a,2*b+c,2*c+d,m*n+3*p-q;11,12, 13,sqrt(3),
exp(2);
3 a, 2 b + c, 2 c + d, m n + 3 p - q
11, 12, 13, 3 , 2e
> a, d, c+k, 2*3, 7*sqrt(2);
a, d, c + k, 6, 7 2
Alt mod de creare a şirurilor este utilizarea operatorului„$”( de unul singur sau
împreună cu operatorul multe puncte „ ..”(zonă). Cu ajutorul operatorului „$” se obţin
succesiuni ordonate.
Exemple
> m$8 ;
m, m, m, m, m, m, m, m
106
> $1..5;
1, 2, 3, 4, 5
> k^3 $ k = - 2..6;
-8, -1, 0, 1, 8, 27, 64, 125, 216
> 2*i^2 $ i = - 4..6;
32, 18, 8, 2, 0, 2, 8, 18, 32, 50, 72
> m[i] $i = - 1..5;
m-1, m0, m1, m2, m3, m4, m5
Altă modalitate de formare a şirurilor este aplicarea comenzii seq. Această
comandă este de mare folos când se doreşte efectuarea rapidă a calculelor.
Exemple
> seq(i^2/(i!+1), i = 1..7);
5041
49,
721
36,
121
25,
25
16,
7
9,
3
4,
2
1
> seq(D(f),f=[sqrt,cos^2,tan,ln,exp,1/sin]); # D
este operatorul de derivare
sqrt
1
2
1, -2 sin cos, 1 + tan2 , a ->
a
1, exp, -
2sin
cos
> max(exp(1),sin(3*Pi/6),sqrt(10),Pi,int(x^2,x =
2..3));
3
19,
107
deoarece 3
19dxx
3
2
2 =∫ .
Mulţime. Sistemul Maple conţine două noţiuni importante: noţiunea de mulţime
şi cea de listă.
Prin mulţime se înţelege o secvenţă neordonată de expresii cuprinse între
acoladele { }. Orice expresie admisibilă în Maple este parte componentă a unei
mulţimi. Elementele mulţimii care se repetă sunt excluse de sistem în mod automat şi se
rearanjează într-o manieră convenţională. Sistemul Maple prevede trei operatori care
operează cu mulţimi: union (uneşte elementele a două mulţimi în una singură),
intersect (creează o mulţime cu elemente comune ale mulţimilor componente) şi
operatorul minus (exclude din prim mulţime elementele celeilalte mulţimi).
Exemple
>{`verde`,`negru`,`write`,+743.569,`club
Internet`};
{club Internet, 743.569, verde, negru, write}
> { -1, -1, -2, -3, 2, -2 }, {a[1], a, c[1],
a[1], c[1]};
{-1, -2, 2, -3}, {a1, a, c1 }
În secvenţele indicate elementele -1 şi -2 precum a1 şi c1 se repetă pe când
rezultatul este returnat fără repetări
> {x, x, y, z, t,11}union{y, t, 11, 11, 17};
{11, 17, x, y, t, z}
> {x, x, y, z, t, 11}intersect{y, t, 11, 11, 17};
{11, y, t}
> {a1, a2, a3}minus{a1, b1, b2}; {x, x, y, z, t,
11}minus{y, t, 11, 11, 17};
108
{a2, a3}
{x, z}
Listă. Un şir de expresii luate între paranteze pătrate „ [, ] ”) poartă denumirea
de listă. Listele, spre deosebire de mulţimi, sunt obiecte ordonate în sensul că ordinea
expresiilor în listă se păstrează întocmai pe întreg parcursul calculelor. Elementele care
se repetă nu sunt excluse din listă.
Exemple
> [0, 1, -3.75,sqrt(2.3), 4, 3, 2^3, 1]; [t, y/y^2,m,x^3];
[0, 1, -3.75, 1.516575089, 4, 3 , 8, 1]
[ t, y
1, m, x3 ]
> [a[1], a, c[1], a[1], c[1]];
[a1, a, c1, a1, c1 ]
> [{m,a,c}, {c,a,m}, {s, o, f, t, w, a, r, e}];
[{m, c, a}, {m, c, a}, {t, f, r, s, a, w, o, e}]
Elementele ultimei liste sunt mulţimi. Dacă ordinea elementelor unei mulţimi
poate fi modificată nu acelaşi lucru se poate spune de ordinea elementelor unei liste.
Ordinea iniţială a listei din memorie nu se modifică.
Maple prevede comenzi şi pentru efectuarea de operaţii cu elementele listelor.
Printre aceste comenzi fac parte: select( ), remove( ), zip( ) şi sort( ). Cu
comanda select(parametrul1, parametrul2), în dependenţă de regula indicată ( o relaţie
logică – parametrul1) în listă (parametrul2) se selectează elementele şi se returnează
într-o listă, păstrându-li-se ordinea. Comanda remove( ) exclude din listă elementele
care nu respectă regula stabilită şi returnează lista elementelor rămase. Două liste mai
pot fi unite în una singură cu ajutorul comenzii op( ). Dacă însă unirea se face în
conformitate cu o anumită regulă, atunci se aplică comanda zip( ). Primul parametru
indică regula de unire a perechilor de elemente Comanda sort( ) sortează liste în
109
conformitate cu o anumită lege dată. În acest caz parametrul1 este o listă, pe când
parametrul2 – o regulă.
Exemple
> M:= array([x, sin(x), sqrt(x), y]); # Dacă name se referă la un tablou sau
array, atunci Maple returnează intrările tabloului(sau array)
M := [x, sin(x), x , y]
> M[3]; # Maple execută o selecţie a listei propuse, anume elementul 3 din
listă
x
> large := t-> is( t>5 );
large := t -> is( 5 < t )
> d := [-8, 2, 0, 105, 2*Pi, sin(5), 5.5*cos(6)];
d := [-8, 2, 0, 105, 2 Pi, sin(5), 5.5 cos(6)]
> select(large,d);
[105, 2 Pi, 5.5 cos(6)]
> remove(large,d);
[-8, 2, 0, sin(5)]
Mai există şi comanda type( ), care selectează elemente de un anumit tip.
Exemple
> select (type,d,numeric);
[-8, 2, 0, 105]
Fie date listele
A:= [seq(ithprime(i), i = 1..6)];
B:= [seq(binomial(6,i), i=1..6)];
A := [2, 3, 5, 7, 11, 13]
B := [6, 15, 20, 15, 6, 1]
Listele A şi B pot fi unite într-o listă dacă se aplică secvenţa
> [ op(A), op(B)];
110
[2, 3, 5, 7, 11, 13, 6, 15, 20, 15, 6, 1]
> zip((a,b) -> {a,b}, A, B);
[{2, 6}, {3, 15}, {5, 20}, {7, 15}, {6, 11}, {1, 13}]
> pare:=(a,b) -> [a,b];
Cu secvenţele > pare := (a, b) -> [a, b] : şi > C:=zip(pare,A,B);
se obţine o listă de liste:
C := [[2, 6], [3, 15], [5, 20], [7, 15], [11, 6], [13, 1]]
Lista de liste ajută la construirea graficelor. Astfel, pentru lista de liste
> M:= [[0,0],[2,5], [5, 7], [8,13],[8.76,12],[11, 6],[12.7,9], [15,0]];
M := [[0, 0], [2, 5], [5, 7], [8, 13], [8.76, 12], [11, 6], [12.7, 9], [15, 0]]
prin intermediul comenzii plot se obtine graficul din fig.8.4
> plot(M);
Fig.8.4
Iată şi câteva cazuri de ordonare:
> sort([3.75,5,21/3,1.15],(x,y)->evalb(x>y)); # se scriu
elementele listei conform legii indicare( în cazul dat în ordinea
descrescătoare):
[7, 5, 3.75, 1.15]
> bf:= (x,y)->is(x<y);
bf := (x, y) -> is(x < y)
> sort([sqrt(5.6),sqrt(5.67), Pi, cos(4.25), 3.69,
int(x^2, x = 0..2)], bf); # ordinea elementelor este
111
cea crescătoare:
[-.4460874899, 2.366431913, 2.381176180, 3
8, π, 3.69]
8.3. Operatori Maple
Sistemul Maple admite mai mulţi operatori: aritmetici, logici, de concatenare, de
derivare, de compoziţie etc. Operatorii au o importanţă aparte la crearea expresiilor şi
efectuarea operaţiilor matematice.
8.3.1. Operatorul de atribuire
Operatorul de atribuire este „:=” şi, de regulă, se aplică în cazurile când unui
nume trebuie să i se atribuie o valoare. Dacă unei variabile x i se atribuie o valoare ( de
exemplu, 105) apoi, în continuare, i se va atribuie o altă valoare (de exemplu, 17)
programul Maple „ţine minte” doar ultima valoare. Operatorul „=”, spre deosebire de
operatorul „:=” , stabileşte o legătură între variabilă şi valoarea expresiei.
Operatorul „=” , numit operator-ecuaţie, se aplică în cazurile când se apelează la
parametrii unei comenzi sau când se cer extrase rezultatele calculelor. Unele comenzi
Maple funcţionează doar datorită operatorului „=”. Printre acestea fac parte şi
comenzile ce ţin de rezolvarea diferitor tipuri de ecuaţii:
• solve – rezolvă în mod analitic ecuaţii liniare şi neliniare, inegalităţi şi
sisteme de ecuaţii,
• fsolve – rezolvă numeric ecuaţii liniare şi neliniare, inegalităţi si
sisteme de ecuaţii,
• dsolve – rezolvă ecuaţii diferenţiale ordinare,
• rsolve – rezolvă ecuaţii recurente.
Exemple
> a = b + 21 ;
a = b + 21
> a;
112
a
> b;
b
> sols:= solve({2*x = 8, x - 2*y = -1}, {x, y});
sols := {x = 4, y = 2
5}
> x;
x
> y;
y
8.3.2. Ditto – operatori
Ditto – operatorii sunt de tip nulari şi se referă la expresiile calculate anterior.
Forma acestor operatori este „ % ”, „ %% ” şi „ %%% ”. Operatorul „ % ” recheamă
rezultatul comenzii anterioare, operatorul „ %% ” recheamă rezultatul comenzii
executate până la rezultatul anterior şi, în sfârşit, „%%%” recheamă rezultatul de mai
înainte.
Exemplu Să se calculeze soluţia sistemului de ecuaţii liniare
=+−=++=++
.3334
,243
,122
321
321
321
xxx
xxx
xxx
Stabilim cinci semne după virgulă (comanda Digits()) şi scriem sistemul:
> Digits:=5:2*x[1]+x[2]+2*x[3]=1;3*x[1]-4*x[2]+x[3]=2;4*x[1]-3*x[2]+3*x[3]=3;
= + + 2 x1
x2
2 x3
1
= − + 3 x1
4 x2
x3
2
= − + 4 x1
3 x2
3 x3
3
113
> solve({%,%%,%%%},{x[1],x[2],x[3]}); evalf(%);# Parametrii
%, %%, %%% din parantezele figurate a comenzii solve( ) înseamnă adresarea
către ecuaţia a treia (%), ecuaţia a doua (%%) şi prima ecuaţie (%%%).
Argumentul comenzii evalf( ) înseamnă rezultatul returnat de comanda
solve( ), adică soluţia 3
1,
3
2,0 321 −=== xxx transformată în
fracţie zecimală
{ }, , = x1
0 = x3
23
= x2
-13
{ }, , = x1
0. = x3
0.66667 = x2
-0.33333
8.3.3. Operatorul de concatenare
Reuniunea mai multor linii în una singură poate fi obţinută şi cu ajutorul
operatorului
cat ( `A`, `B`, `C`, …)
unde `A`, `B`, …sunt linii. Comanda returnează linia `ABC…`.
Un instrument util pentru formarea de nume şi linii este şi semnul de
concatenare„.” (punct), cu ajutorul căruia pot fi create mulţimi de nume.
Exemple
> cat(`Mihai Eminescu-` , `poetul nepereche`);
Mihai Eminescu-poetul nepereche
> seq(nume.i, i=2..6);
nume2, nume3, nume4, nume5, nume6
> add(M.k, k=1..5);
M1 + M2 + M3 + M4 + M5
8.3.4. Operatorul de compoziţie
114
Operatorul de compoziţie se aplică la crearea funcţiilor compuse şi are forma:
• f@g când se doreşte crearea compoziţiei funcţiilor f şi g sau
• f@@n când se aplică f de n ori.
Exemple
> (ln@sin)(x);
ln(sin(x))
> > f:= x -> 2/(1+x^2); (f@@6)(x);
:= f → x2
+ 1 x2
2
+ 14
+ 14
+ 14
+ 14
+ 14
( ) + 1 x22
2
2
2
2
> g:=t->sqrt(t)/(1-t^4);(g@@3)(t);
:= g → tt
− 1 t4
t
− 1 t4
− 1t2
( ) − 1 t44
− 1t
( ) − 1 t42
− 1t2
( ) − 1 t44
4
8.3.5. Operatorul neutru
115
Acest operator este determinat de utilizator. Numele unui astfel de operator
trebuie să înceapă neapărat cu caracterul & urmat de caractere permise. Nu pot fi părţi
componente ale operatorului caracterele &, ( ), [ ], { }, ; , : , ‚” , #, _ etc.
Operatorul neutru depinde de următoarele comenzi:
¿ define (aa(oper)), unde oper este un nume a operatorului, aa este nume a
obiectului,
¿ define (oper, propriety1, propriety2, …), unde oper este nume, iar
propriety sunt proprietăţi ale operatorului. Cu aceste comenzi se determină
regulile pentru calcule şi de simplificare ale operatorului.
Exemplu
> define(Linear(`&L`));
> &L(5*(x^2)+3*(y+2*x) – 8x);
5 &L(x2) + 3 &L(y) - 2 &L(x)
8.4. Funcţii Maple
Maple oferă mai multe posibilităţi de prezentare a funcţiilor. Mai întâi, dacă
expresiei i se atribuie un nume, acest lucru înseamnă că numele propriu-zis este o
funcţie în raport cu variabilele care fac parte din expresie.
Exemplu
> h := x^3 - 5*sin(x) + 7*cos(x)^2 - 4.575:
> h;
x3 - 5 sin(x) + 7 cos(x)2 - 4.575
Prin intermediul operatorului „:=" variabila h coincide cu valoarea expresiei
x3-5sin(x)+7cos(x)2-4.575 . Introducând acum
> x; # în cazul dat variabila x nu are o valoare numerică
x
116
Dacă însă
> x := 3;
x := 3
> h; # h va primi valoarea :
22.425 - 5 sin(3) + 7 cos(3)2
sau, dacă se aplică ditto operatorul, rezultă că
> evalf(%);
28.57999596
adică am obţinut valoarea expresiei x3 - 5 sin(x) + 7 cos(x)2 - 4.575 pentru x =
3. Prin urmare, variabila h este valoarea expresiei matematice cu numele h.
Pentru diverse valori atribuite variabilei x şi h va primi valori diferite. Prin
urmare, variabila h este o funcţie de x.
Maple conţine un număr mare de funcţii: funcţii standard şi funcţii speciale. Iată
lista unora din aceste funcţii (vezi tab. 8.1)
Tabelul 8.1. Funcţii standard
Scriere
matematică
Scriere în
Maple
Scriere
matematică
Scriere în
Maple ex exp(x) cosecx csc(x) lnx ln(x) arcsinx arcsin(x) lgx log10(x) arccosx arccos(x) logax log[a](x) arctgx arctan(x) √x sqrt(x) arcctgx arccot(x) |x| abs(x) shx sinh(x) sinx sin(x) chx cosh(x) cosx cos(x) thx tanh(x) tgx tan(x) cthx coth(x) ctgx cot(x) δ (x) dirac(x) secx sec(x) θ (x) Heaviside(x)
Variabila h poate fi variabilă şi pentru alţi operatori de atribuire.
117
Exemplu
> y:= 2*h^2-sqrt(13.5)*h + 2;# h este variabilă pentru expresia y
y := 2 (22.425 - 5 sin(3) + 7 cos(3)2 )2 --80.39471122 + 18.37117307 sin(3)
–
25.71964230 cos(3)2
> evalf(%);
1530.622728
8.5. Structuri Maple
Expresiile sunt formate din mai multe tipuri de obiecte. Printre acestea fac parte
string, interger, fraction, float, function, operatorii aritmetici +,
*, ^ etc. Tipul obiectului poate fi definit cu ajutorul comenzii whattype( ).
Exemple
> whattype(21/315);
fraction
> whattype([a1,a2,a3,a4,a5,a6]);
list
> whattype([3,4,7,8,9,13],[a[1],a[2],a[3]]);
exprseq
> whattype((z^3 + 2*z -7)*(x - y));
*
Tipul obiectului de asemenea poate fi consultat în orice moment însă nu poate fi
afişat dinnainte aşa cum se procedează, de exemplu, în limbajul Fortran când tipul
variabilei se stabileşte pe întreg parcursul funcţionării programului. Tipul variabilei
poate fi obţinut cu ajutorul comenzii type( ).
Exemple
118
> H:= ` România - ţară pitorească`; M:= `Maple este un
program universal de calcule matematice`;
H := România - ţară pitorească
M:= Maple este un program universal de calcule matematice
> type(H, integer); type (M, fraction); type(M, string);
false
false
true
> whattype ( x= z^3 +z - 1);
=
Analiza structurii obiectelor se efectuează cu comanda hastype( ). În felul
acesta se stabileşte dacă un obiect conţine subobiecte de un anumit tip. Comanda
has( ), la rândul ei, indică dacă în componenţa obiectului se conţine un anumit
subobiect.
Exemple
> hastype(205 +13/15, fraction); hastype(205+13/15, integer);
true
false
> hastype(x^2-7*x-5, `*`);
true
> hastype(x^2-7*x-5, -5);
true
> has(x^2-7*x-5, 2*x); has(x^2-7*x-5, -7*x);
false
true
> hastype(int(sin(sqrt(x)), x), fraction); int(sin(sqrt(x)),n x);
true
119
2 sin( x ) - 2 x cos( x )
Orice obiect Maple constă din subobiecte care, la rândul lor, au în componenţa
lor obiecte de alt tip (de un nivel mai mic) şi tot aşa până când se va ajunge la obiectele
de bază.
Mijloacele Maple permit examinarea şi extragerea elementelor bazice care fac
parte din obiect. Această posibilitate este de mare folos atunci când se operează cu
obiecte mari. Pentru astfel de cazuri sunt prevăzute comenzile op( ) şi nops( ), care se
referă în mod direct la tipului obiectului. În cazul când obiectul supus analizei este o
expresie comanda nops( ) va indica numele subobiectului (expresiei) de prim nivel care
este parte componentă a obiectului, iar comanda op( ) poate fi aplicată pentru
evidenţierea acestor subobiecte.
Exemple
> f:=6.5*x^(1/3) + 3*sin(x)^2*cos(x) + 2*sqrt(x) –3*x– 7;
f := 6.5 x1/3 + 3sin(x)2cos(x) + 2 x – 3 x – 7
> nops(f); # numărul obiectelor expresiei
5
> op(f); # obiectele componente ale expresiei
6.5 x1/3 , 3sin(x)2 cos(x), 2 x , –3 x, –7
Comanda op( ) poate fi folosită şi la extragerea elementelor individuale ale
expresiei sau, dacă se aplică de mai multe ori, poate să „coboare” până la subobiecte.
Exemple
> g:= 3*x^3+x*sin(x)-2/cos(x)+23; d:= f;
g := 3 x3 + x sin(x) - 2
cos x + 23
d := 6.5 x1/3 + 3sin(x)2cos(x) + 2 x – 3 x – 7
> op(1,g); op(2,f); op(3,g); op(4,g);
120
3 x3
3 sin(x)2 cos (x)
- 2
cos x
23
> x:=Pi/6; g; evalf("); x:=Pi; g; evalf("); x:=3; f; evalf(");
x := 16
π
1
72π3
1
12π−
433 + 23
21.38304104
x := π
3 π3 + 25
118.0188301
x := 3
6.5 ¿31/3 + 3 sin(3)2cos(3) + 2 3 - 16 (observăm
că programul în mod automat a calculat –3x –
7 pentru x = 3)
- 3.22042285
> op(1,op(2,g)); op(1,op(1,g)); op(0,op(4,g)); op(2,op(3,g));
x
3
integer
1
cos x
> whattype(op(2,g);
expreseq
> op(0,op(1,g));
integer
121
Dacă obiectul luat spre examinare este o variabilă cu indice (cu numele N)
comanda nops( ) va returna indicele variabilei, comanda op(i, N) va returna indicele i,
iar op(0, N) – numele variabilei.
Exemple
> nops(A[i, j]); nops(A[m][n]);
2
1
> op(1,A[i,j]); op(1,A[m][n]);
i
n
> op(0,A[2,3]);
A
8.6. Operaţii analitice cu comenzi Maple
Maple este conceput ca utilizatorul să poată să grupeze termenii unei expresii, să
descompună expresiile în factori, să deschidă paranteze, să transforme o fracţie raţională
în fracţii elementare etc. Maple mai prevede comenzi pasive şi comenzi active.
Comenzile cu forma activă fac calcule imediat, returnând rezultatul pe foaia de lucru, pe
când comenzile pasive – afişează doar înscrierea matematica a expresiei. Deosebirea
dintre o comandă activă şi una pasivă este că comanda pasivă începe cu o literă mare.
Printre comenzile cu două forme amintim cele legate de calcularea derivatei (diff( ) şi
Diff( )), integralei (int( ) şi Int( )), sumei (Sum( ) şi sum( )), produsului
(product( ) şi Product( )) etc.
8.6.1. Comanda simplify( )
Expresiile algebrice pot fi aduse la o formă mai simplă cu ajutorul comenzii
simplify( ). În general, problema simplificării în majoritatea sistemelor de calcule
122
analitice nu este simplă. În unele cazuri unele simplificări pot fi considerate simple, iar
în alte cazuri, aceleaşi modificări, din alt punct de vedere, se consideră compuse. De
exemplu, atunci când se rezolvă o ecuaţie trigonometrică nu întotdeauna este raţional să
înlocuim sin(x)2 + cos(x)2 cu 1, deşi această operaţie, fără doar şi poate, este o
simplificare. Uneori, însă, e mai bine ca 1 să se prezinte prin suma sin(x)2 + cos(x)2. În
Maple comanda simplify( ) operează cu mai multe proceduri: simplify/exp,
simplify/ln, simplify/sqrt, simplify/trig, implify/radical,
simplify/power etc.
Exemple Să se aducă la o formă mai simplă expresiile:
a) A = + + + + 2 ( )cos x 2 4 ( )sin x ( )cos x ( )cos x ( )sin x 1
− + + − 4 ( )cos x 2 2 ( )sin x ( )cos x 3 ( )cos x 3 ( )sin x 3 ,
b) B =
+ + ( )sin − π α 2 ( )tan − π α 2
tan +
3 π2
α2
sin +
π2
α ( )cos − α 2 π ,
c) C = − + + − a3 b3 3 a2 b 2 c 3 a b2
Avem:
> simplify(A);
+ 1 ( )sin x( )cos x
> simplify(sin(Pi-alpha)^2+tan(Pi-alpha)^2*tan(3*Pi/2+
alpha)^2+sin(Pi/2+alpha)*cos(alpha-2*Pi));
2
> B:=sin(Pi-alpha)^2+tan(Pi-alpha)^2*tan(3*Pi/2+
alpha)^2+sin(Pi/2+alpha)*cos(alpha-2*Pi); # Observăm
că sistemul şi fără comanda simplify( ) a adus expresia la o formă mai simplă
:= B + + ( )sin α 2 ( )tan α 2 ( )cot α 2 ( )cos α 2
> simplify(B);
2
> C:=a^3-b^3+3*a^2*b+2*c-3*a*b^2: simplify(C,{a^3-
3*a*b^2=1,3*a^2*b=b^3});
+ 2 c 1
123
8.6.2. Comanda expand( )
Parantezele într-o expresie algebrică pot fi deschise(închise) cu comanda
expand( ). Pentru o fracţie algebrică comanda deschide paranteze la numărător, apoi
împarte fiacare termen al expresiei obţinute la numitorul fracţiei fără a efectua
transformări. Comanda „ştie să lucreze” cu funcţii matematice şi „cunoaşte” regulile de
deschidere a parantezelor în expresiile care conţin funcţiile sin( ), cos( ), tg( ), sh( ),
ch( ), th( ), ln( ), exp( ), abs( ), precum şi un număr mare de funcţii matematice
speciale.
Exemple Să se deschidă parantezile în expresiile:
a) ( ) − x 3 ( ) + x 4 2, b)
( ) − x 2 3
( ) + x 2 2 , c) ( )sin + + x y z , d)
( ) + x 1 2 ( ) + − y 2 z 3 t (faţă de x+1).
Avem
> expand((x-3)*(x+4)^2);expand((x-2)^3/(x+2)^2);
expand(sin(x+y+z));expand((x+1)^2*(y+2*z-3*t),x+1);
+ − − x3 5 x2 8 x 48
− + − x3
( ) + x 2 2
6 x2
( ) + x 2 2
12 x
( ) + x 2 2
8
( ) + x 2 2
( )sin x ( )cos y ( )cos z ( )sin x ( )sin y ( )sin z ( )cos x ( )sin y ( )cos z − + ( )cos x ( )cos y ( )sin z +
+ − ( ) + x 1 2 y 2 ( ) + x 1 2 z 3 ( ) + x 1 2 t
8.6.3. Comanda factor( )
Un polinom cu coeficienţi numerici se descompune în factori cu ajutorul comenzii
factor( ).
Exemple
Să se descompună în factori:
> factor(x^3*y+x^3*b+a*x^2*y+a*b*x^2+2*x^2*y^2+2*b*x^2
*y+2*a*x*y^2+2*a*b*x*y+x*y^3+b*x*y^2+a*y^3+a*b*y^2);
124
( ) + x y 2 ( ) + y b ( ) + x a
> E:=3*sin(x)*cos(x)^2+sin(x)^3-cos(x)^3-
3*sin(x)^2*cos(x):factor(E);
( ) − ( )sin x ( )cos x 3
> factor(4*x^2+16*x-20);
4 ( ) + x 5 ( ) − x 1
> factor(x^3-7,complex);factor(x^3-7,real);
( ) + x + .9564655914 1.656647000 I ( ) + x − .9564655914 1.656647000 I
( ) − x 1.912931183
( ) − x 1.912931183 ( ) + + x2 1.912931183 x 3.659305710
> factor(a^3-b^3);
( ) − a b ( ) + + a2 a b b2
8.6.4. Comanda normal( )
O fracţie algebrică poate fi redusă cu comanda normal( ). Dacă parametrul este
o listă, o mulţime, un şir, o ecuaţie sau o funcţie comanda se aplică tuturor
componentelor parametrului.
Exemple > fracţie:=1/(x+1) - 1/(x+2) + x/(x+1);
:= fractie − +
1 + x 1
1 + x 2
x + x 1
> fracţie:=normal(fracţie);
:= fractie
+ x 1 + x 2
> normal((x^3+y^3)/(x+y)^3);
− + x2 y x y2
( ) + x y 2
> normal(sin((x*(x^2-1)+x)/(x^2)));
( )sin x
> m:=tan(x/(x+1)-x)^2+cot(-x/(x+1)+x);normal(m);
125
:= m +
tan −
x + x 1
x2
cot − +
x + x 1
x
+
tan
x2
+ x 1
2
cot
x2
+ x 1
8.6.5. Comanda combine( )
Gruparea termenilor unei expresii se obţine cu comanda combine( ).
Comanda, practic, „cunoaşte” toate regulile ce ţin de transformările funcţiilor
matematice elementare.
Exemple > combine(Int(cos(x),x=-Pi..Pi)-Int(sin(x),
x=-Pi..Pi));
d⌠
⌡−π
π
− ( )cos x ( )sin x x
> combine(Limit(2^x,x=a)*Limit((2^x)^b,x=a)+C);
lim → x a
+ 2( ) + x x b
C
> combine(exp(x)*exp(y^3)*exp(ln(cos(alpha)*
sin(alpha))),exp);
( )cos α ( )sin α e( ) + x y3
> P:=4^sqrt(x)*6^y*7^z*24^t:combine(P, power);
combine(x^(cos(a)^2),power);
4( )x
6y 7z 24t
x( )( )cos a 2
> combine([8*cos(x)^3*sin(x)-4*sin(x)*cos(x),
8*cos(x)^4-8*cos(x)^2+1],trig);
[ ],( )sin 4 x ( )cos 4 x
126
8.6.6. Comanda collect( )
Termenii asemenea pot fi grupaţi cu comanda collect( ).
Exemple
> E:=a*sin(x)-sin(x)*2-a*cos(x)+2*cos(x)*sin(x);
:= E − − + a ( )sin x 2 ( )sin x a ( )cos x 2 ( )sin x ( )cos x
> F:=collect(E,sin(x));
:= F − ( ) − + a 2 2 ( )cos x ( )sin x a ( )cos x
> H:=collect(F,cos(x));
:= H + ( ) − 2 ( )sin x a ( )cos x ( ) − a 2 ( )sin x
> g:=int(x^2*(exp(x)-exp(-x))+x^2,x);
:= g − + + + + + x2 e x 2 x e x 2 e x x2
e x
2 x
e x
2
e x
13
x3
> collect(g,exp(x));
+ + ( )− + + 2 x 2 x2 e x 1
3x3 + + 2 x 2 x2
ex
> collect(g,x);
+ + + +
13
x3
+
1
e xe x x2
− 2
1
e x2 e x x
2
e x2 e x
8.6.7. Comanda rationalize( )
Cu rationalize( ) se obţin transformări cu fracţii numerice şi algebrice.
Dacă argumentul funcţiilor transcendente este o fracţie cu iraţionalităţi la numitor
procedura de raţionalizare nu funcţionează.
Exemple > expresia_1:=6/(3-sqrt(3));
:= expresia_1 6
1
− 3 3
> rationalize(expresia_1);
127
+ 3 3
> expr_2:=(1+3^(1/3))/(1-3^(1/3));
:= expr_2
+ 1 3( )/1 3
− 1 3( )/1 3
> rationalize(%);
−
12
( ) + 1 3( )/1 3
( ) + + 1 3( )/1 3
3( )/2 3
> rationalize([x/(x-sqrt(5)),x/(x-sqrt(1+sqrt(5)))]);
,
x ( ) + x 5
− x2 5
x ( ) + x + 1 5 ( ) − + x2 1 5
− − x4 2 x2 4
> f:=[(x^2-y^2)/(x+sqrt(y)),x^2*y/(x+sqrt(x+sqrt(7)))];
:= f
, − x2 y2
+ x y
x2 y
+ x + x 7
> rationalize(f);
,
( ) − x2 y2 ( ) − x y
− x2 y
x2 y ( ) − x + x 7 ( ) − + x2 x 7
− + − x4 2 x3 x2 7
> 1/(1+root(cos(1/(1-sqrt(beta))),3));
1
+ 1
cos
1
− 1 β
( )/1 3
> rationalize(%);
− + 1
cos
1
− 1 β
( )/1 3
cos
1
− 1 β
( )/2 3
+ 1
cos
1
− 1 β
> f1:=1/(1-(1+sqrt(alpha))^(1/3));rationalize(%);
1
− 1 ( ) + 1 α
13
− + + 1 ( ) + 1 α
13
( ) + 1 α
23
α
128
8.6.8. Alte comenzi
Pentru simplificarea expresiilor, care conţin radicali de ordin diferit de ordinul
doi, se apelează la comanda radnormal( ).
Exemple
>sqrt(3+sqrt(3)+(10+6*sqrt(3))^(1/3))=radnormal(sqrt(3
+sqrt(3)+(10+6*sqrt(3))^(1/3)));
= + + 3 3 ( ) + 10 6 3( )/1 3
+ 1 3
Comanda convert(exp, param) transformă exp în tipul indicat de param. In
particular, poate fi transformată o expresie care conţine sinx şi cosx într-o expresie care
va conţine doar tgx dacă se va indica param = tan sau, invers, tgx, ctgx pot fi
transformate în sinx şi cosx dacă se indică parametrul sin sau cos.
În general, menirea comanzii convert( ) este convertirea unei expresii în altă
expresie. Astfel, de exemplu,
>convert(list, vector);
transformă o listă de expresii de un anumit tip într-o listă de alt tip (cu aceleaşi
elemente).
129
C a p i t o l u l 9
PACHETE ŞI GRAFICĂ MAPLE
9.1. Pachete ale algebrei liniare
9.1.1. Noţiuni de bază
Sistemul Maple dispune de un nucleu şi o bibliotecă cu un număr impresionat de
pachete specializate care conţin comenzi pentru rezolvarea problemelor din cele mai
diferite compartimente ale matematicii. Astfel, versiunea Maple 6 are în componenţă 40 de
astfel de pachete, iar Maple 9 deja conţine 85 de astfel de pacete.
Biblioteca de bază conţine cele mai des folosite comenzi care se încarcă odată cu
lansarea sistemului. Dacă, însă, o comandă nu face parte din biblioteca de bază sau din
nucleu, utilizatorul este obligat să încarce pachetul în componenţa căruia se află comanda
în cauză sau, pur şi simplu, doar comanda care-l interesează din pachetul respectiv.
Comenzile unui pachet se încarcă cu with(nume pachet) sau, dacă se doreşte încărcarea
doar a unei comenzi, atunci se apelează la with(nume pachet, nume comandă).
Lista celor mai des folosite pachete ale sistemului Maple este următoarea:
alcurves, combinat, genfunc, geometry, geom3d, plots, group, linalg,
GF, LinearAlgebra, networks, plottools, powseries, simplex, stats,
tensor, DiscreteTransforms, GaussInt, context, LinearOperators,
MathematicalFunctions, MatrixPolynomialAlgebra, OreTools, Sudent,
Student[Calculus], Sumtools, sumtools, Student[LinearAlgebra],
Student[Precalculus], VariationalCalculus, VectorCalculus,
student etc.
130
Utilizatorii interesaţi de un anumit pachet sau de o funcţie pot obţine informaţia
necesară, adresându-se Sistemului de informaţie Help.
9.1.2. Pachetul linalg
Sistemul Maple (începând cu versiunea 6) prevede două pachete care conţin
comenzi pentru efectuarea celor mai diverse transformări din algebra liniară. Acestea sunt
linalg şi LinearAlgebra, funcţionalitatea cărora este aproape identică. Dacă
pachetul linalg este parte componentă a tuturor versiunilor anterioare ale sistemului
Maple, pachetul LinearAlgebra reprezintă o nouă modalitate de lucru cu matricele
numerice, inclusiv şi cu matricele de dimensiuni mari.
Obiectele de bază cu care operează comenzile acestor pachete sunt matricele, însă
noţiunea de matrice din linalg nu este echivalentă cu cea a pachetului
LinearAlgebra. Pachetul linalg „construieşte” matrice cu comanda (funcţia)
array( ), iar LinearAlgebra utilizează obiecte bazate pe structura r-table. Matricele
şi vectorii sunt create de constructorii speciali Vector( ) şi Matrix( ) sau de structura
<a, b, c> (<a|b|c>). Pachetul linalg operează cu matrice la nivel de nume, adică nu
pot fi efectuate operaţii asupra elementelor matricelor. Pentru efectuarea unor astfel de
operaţii este nevoie şi de comanda evalm( ). Pachetul LinearAlgebra, la rândul său,
conţine comenzi cu ajutorul cărora pot fi efectuate operaţii la nivel de elemente ale
matricelor.
Pachetul linalg conţine comenzi pentru scrierea matricelor şi vectorilor, propune
un număr mare de comenzi pentru operarea cu diverse structuri ale obiectelor pentru
rezolvarea sistemelor de ecuaţii liniare, pentru eterminarea valorilor şi vectorilor proprii a
unei matrice, pentru transformarea matricelor sub diverse forme etc.
Matricele sau vectorii în Maple se definesc fie cu comanda array( ) (din biblioteca
standard), fie cu comenzile marix( ) şi vctor( ). Comanda array( ) are forma
array(intervale, listă, opţiuni);
Parametrii comenzii nu sunt obligatorii, ordinea acestora fiind arbitrară. Parametrul
intervale sunt numere întregi despărţite prin virgulă. Valorile elementelor intervalului sunt
date de parametrul listă sub formă de listă pentru intervale unidimensionale sau sub formă
131
de listă de liste pentru intervale de mai multe dimensiuni. Parametrul opţiuni poate primi
valorile symmetric, antisymmetric, identy şi diagonal.
Exemple > vec1:=array(1..3,[x[1],x[2],x[3]]);vec2:=
array(1..2,[4,-7]);
:= vec1 [ ], ,x
1x
2x
3
:= vec2 [ ],4 -7
> matr:=array(1..2,1..2,[[a[11],a[12]],[a[21],a[22]]]);
:= matr
a11
a12
a21
a22
> A:=array(1..3,1..3,[[1,0,-1],[2,1,4],[2,-6,0]]);
:= A
1 0 -12 1 42 -6 0
Vectorii şi matricele, după cum a fost menţionat mai sus, se obţin şi cu ajutorul
comenzilor vector( ) şi matrix( ):
vector (n, [elementul 1, elementul 2, … ] );
matrix (n, m, [ elementul 1, elementul 2, …] );
Exemple > vect:=vector(2,[a[1],a[2]]); b:=vector(3, [2,0,-9]);
:= vect [ ],a1
a2
:= b [ ], ,2 0 -9
> A:=matrix(2,3,[a[11],a[12],a[13],a[21],a[22],a[23]]);
:= A
a11
a12
a13
a21
a22
a23
132
Maple conţine comezi care evidenţiaază substructuri ale matricei: coloane, linii,
submatrice, minori. Comanda row(A, i ) indică linia i în matricea A, iar col(A, j ) –
coloana j. Cu submatrix(A, i1..in, j1..jm) se extrag submatrice din matricea dată. În
cazul unui vector se apela la comanda subvector(vec, i1..in). Dacă, însă, pentru o
matrice dată se doreşte evidenţierea minorului Mij , atunci se aplică comanda minor(A, i, j)
Exemple > F:=matrix(4,3,[cos(x),sin(x),tan(x),x,x^2,
x^3,t,t^2,t^3,2,8,16]);
:= F
( )cos x ( )sin x ( )tan x
x x2 x3
t t2 t3
2 8 16
> row(F,3);col(F,2..3);
[ ], ,t t2 t3
,[ ], , ,( )sin x x2 t2 8 [ ], , ,( )tan x x3 t3 16
> F1:=submatrix(F,2..4,2..3);
:= F1
x2 x3
t2 t3
8 16
> F2:=extend(F,0,1,4);F3:=minor(F2,3,4);
:= F2
( )cos x ( )sin x ( )tan x 4
x x2 x3 4
t t2 t3 4
2 8 16 4
,
:= F3
( )cos x ( )sin x ( )tan x
x x2 x3
2 8 16
133
9.1.2.1. Operaţii cu matrice
Comanda evalm( ) adună matrice. Amintim, evalm( ) efectuează operaţii la nivel
de obiecte, folosind operaţiile: + (adunare), - (scădere), &* (înmulţire ), / (împărţire), ^
(ridicare la putere ). Prin urmare, suma a două matrice (de aceleaşi dimensiuni) poate fi
obţinută cu evalm(A+B).
Produsul matricelor A şi B este rezultatul comenzilor multiply(A, B) sau
evalm(A&*B) cu condiţia că dimensiunile matricelor sunt de natură ca operaţia în cauză
să aibă loc.
Exemple > with(linalg):A:=array([[1,2],[3,4]]);B:=
array([[1,-1],[0,-1]]);
:= A
1 2
3 4 , := B
1 -1
0 -1
> C1:=evalm(A+2*B);C2:=evalm(2*A+B^2);
:= C1
3 03 2 ,
:= C2
3 46 9
> C3:=evalm(sin(A));C4:=evalm(A&*B);
:= C3
( )sin 1 ( )sin 2( )sin 3 ( )sin 4 ,
:= C4
1 -33 -7
Cu evalm(A^k) poate fi obţinută matricea Ak, iar comenzile inverse(A) sau
evalm(1/A) calculează Aˉ1. Matricea transpusă AT se va obţine cu transpose(A).
Determinantul matricei A şi rangul acesteia se obţin cu ajutorul comenzilor det(A) şi
rank(A).
Exemple > A := array( [[1,-x],[2,3]] );B:=array([[2,3],
134
[0,1]]);
:= A
1 −x2 3 ,
:= B
2 3
0 1
> B1:=evalm(B^3);B2:=inverse(B);A1:=inverse(A);
:= B1
8 210 1 ,
:= B2
12
-32
0 1 , := A1
31
+ 3 2 xx
+ 3 2 x
−21
+ 3 2 x1
+ 3 2 x
> multiply(B2,B);A2:=multiply(A,A1);
1 0
0 1
:= A2
+ 31
+ 3 2 x2 x
+ 3 2 x0
0 + 31
+ 3 2 x2 x
+ 3 2 x
> simplify(A2);
1 00 1
> A3:=transpose(A);B3:=transpose(B1);
:= A3
1 2
−x 3 , := B3
8 021 1
> rank(B);rank(B3);det(A);det(A1);
2, 2, 3+2x, 1
+ 3 2 x
135
9.1.3. Pachetul LiniarAlgebra
Acest pachet este realizat sub forme de module, bazându-se pe o nouă construcţie a
limbajului Maple. Comenzile pachetului pot fi chemate cu ajutorul operaţiei adresării către
obiect „ : –”.
> LinearAlgebra:-nume_comandă(parametri);
Înainte de a pune în funcţiune o comandă a acestui pachet trebuie activat:
with(LinearAlgebra); sau o comandă în aparte with(LinearAlgebra,
nume_comandă);
Pachetul LinearAlgebra operează cu scalari, expresii algebrice, matrice,
vectori. Matricele şi vectorii sunt opera constructorului de matrice şi a constructorului de
vectori. Constructorul de matrice este comanda Matrix( ), care are forma:
Matrix(r,c,init,ro,sc,sh,st,o,dt,f,a);
Semantica parametrilor şi valorile admisibile sunt indicate în tabelul 9.1.
Tabelul 9.1. Parametrii constructorului de matrice
Parametrul Semnificaţia
r Număr nenegativ sau o zonă de numere întregi pozitive care începe cu 1 şi reprezintă numărul liniilor matricei
c Număr nenegativ sau o zonă de numere întregi pozitive, care încep cu 1 şi reprezintă numărul coloanelor matricei
i n i t I n d i c ă v a l o r i l e e l e m e n t e l o r m a t r i c e i . P o a t e f i :
procedură - parametru de intrare: un cuplu de numere întregi care determină indicii elementului şi returnează valoarea elementului, de exemplu, (i, j) → (i*j);
expresie algebrică care se calculează ca o procedură de doi parametri şi returnează valorile elementului;
tabel, elementele căruia (cu indici nenegativi), reprezintă elementele matricei;
o mulţime de ecuaţii de forma (i, j) = valoare, unde indicii nenegativi sunt indicii elementelor matricei ;
136
tablou bazat pe r-tabele, creat de comanda array( ) sau Array( ), indicele începe cu 1;
matrice bazată pe r-tabel, creată de constructorul Matrix(,);
listă - elementele căreea sunt interpretate ca valori a liniei 1 ale matricei sau listă compusă din liniile a matricei ;
r o Are forma readonly sau readonly = true; valorile elementelor matricei nu pot fi modificate
s c Ecuaţie de forma scan = nume sau scan = listă care determină structura sau ordinea datelor iniţiale
s h Ecuaţie de forma shape=nume sau shape=listă care determină una sau mai multe funcţii incluse sau funcţii cu indice ale utilizatorului
s t Ecuaţii de forma storage=nume, unde nume este una din regiunile admise a memoriei; determină cerinţele memoriei pentru repartizarea elementelor matricei
o Păstrează elementele matricei în memorie (pe linii sau coloane)
d t Ecuaţie de forma datatype=nume, unde nume este tipul de date păstrate sub formă de matrice
f Ecuaţie de forma fill=valoare şi determină valoarea atribuită elementelor nedefinite ale matricei, implicit este 0
a Ecuaţie de forma attributes=listă şi determină atributele matricei (pozitiv definită ) cu ajutorul cărora matricea a fost creată
Nu toţi parametrii constructorului de matrice sunt obligatorii. Lipsa parametrilor
este echivalentă cu o matrice de dimensiunea 0× 0. Prin urmare, importanţi sunt primii trei
parametri. Prezenţa celorlalţi parametri face ca procesul de prelucrare a datelor să fie mai
rapid.
Exemple > Matrix(3); Matrix(3,4);
137
0 0 00 0 00 0 0
,
0 0 0 0
0 0 0 00 0 0 0
> Matrix(1..1,1..5,-3);
[ ]-3 -3 -3 -3 -3
> Matrix([[3,2,1],[-1,-2,-3]]);
3 2 1-1 -2 -3
> Matrix(3,(i,j)->s^(2*i-j));
s 11s
s3 s2 s
s5 s4 s3
Prin suma matricei A cu scalarul s se înţelege operaţia A + sE, unde E este matricea
unitate şi dim(A) = dim(E).
Exemple > S:=s + <<a[11]|a[12]|a[13]>,<a[21]|a[22]|a[23]>>;
S:=s*IdentityMatrix(2,3)+<<a[11]|a[12]|a[13]>,
<a[21]|a[22]|a[23]>>;
:= S + s
a11
a12
a13
a21
a22
a23
:= S + s
1 0 00 1 0
a11
a12
a13
a21
a22
a23
> s:=7:a[11]:=1:a[12]:=- 1:a[13]:=2:a[21]:=3:
a[22]:=4:a[23]:=5:S;
138
8 -1 23 11 5
> -5*<2|4|6>; # Produsul dintre un scalar şi o matrice-linie
[ ], ,-10 -20 -30
> 5*<<2*x,8>|<3,6*t>>;# Produsul dintre un scalar şi o matrice
10 x 1540 30 t
9.1.3.1. Produs scalar.
Operaţia „.” se aplică şi la produsul scalar al matricelor şi vectorilor.
Exemple > <2,3>.<4|3>;# Produsul unei matrice-coloană (vector-coloană)
cu o matrice-linie(vector-linie)
8 6
12 9
> <4|3>.<2,3>;# Produsul dintre o matrice-linie si o matrice-
coloană
17
> A:=<<3,a>|<b,10>|<5,c>>;B:=<<1,2,3>|<-1,0,2>>;
:= A
3 b 5a 10 c
:= B
1 -12 03 2
> A.B;
+ 18 2 b 7 + + a 20 3 c − + a 2 c
139
Pentru obţinerea Ak se va apela la operaţia produsului scalar sau la operaţia de
ridicare la putere. Exponentul k poate primi şi valori negative.
Exemple > A:=<<2.5|0.4>,<.6|.5>>;
:= A
2.5 .4
.6 .5
> A.A.A.A.A;
115.725849999999994 21.900039999999997232.8500599999999992 6.22565000000000079
> A^5;
115.725850000000008 21.900040000000000632.8500599999999992 6.22565000000000079
> A^(-1);A^(-2);
.495049504950495100 -.396039603960396114-.594059405940594032 2.47524752475247524
.480345064209391048 -1.17635525928830464-1.76453288893245696 6.36212136065091460
> %.A; # Verifică dacă A -1A = E
1.00000000000000022 0.
0. 1.
> A^(-2).A.A; # Verifică dacă A -2A2 = E
.99999999999999944 0.
-.888178419700125232 10-15 .99999999999999956
Evidenţierea unor elemente sau a unor submatrice ale unei matricei se va obţine cu
ajutorul indicilor.
Exemple> M:=Matrix(5,(i,j)->2*i-j);
:= M
1 0 -1 -2 -33 2 1 0 -15 4 3 2 17 6 5 4 39 8 7 6 5
140
> M[4,5]; # S-a ales elementul = a45
3
3
> M[5,1..-1];M[1..-1,3]; # Din matricea M s-a extras o linie şi o
coloană
[ ], , , ,9 8 7 6 5 ,
-1
1
3
5
7
> M[1..4,4..5];# Din matricea M a fost extrasă o submatrice
-1 -2 -31 0 -13 2 15 4 3
9.1.3.2. Valori şi vectori proprii.
Să calculăm acum determinantul matricei B = A - λE, unde A =
603
531
412
.
Avem:
> A:=matrix(3,3,[2,1,4,1,3,5,3,0,2]):B:=evalm(A-
lambda*diag(1,1,1));
:= B
− 2 λ 1 4
1 − 3 λ 5
3 0 − 2 λ
> P[3](lambda):=det(B);
:= ( )P3
λ − − + − 11 3 λ 7 λ2 λ3
Pentru determinarea polinomului caracteristic sistemul Maple prevede comanda
charpoly( ):
> charpoly(A,lambda);
141
+ − + 3 λ 11 7 λ2 λ3
Rădăcinile ecuaţiei ( )P3
λ = 0 se numesc valori proprii ale matricei A. Prin
urmare,
> val_proprii:=evalf(solve(P[3](lambda), lambda),4);
:= val_proprii , ,-1. 6.236 1.764
Ultimul rezultat se obţine şi cu ajutorul comenzii special prevăzute pentru
calcularea valorilor proprii:
> evalf(eigenvals(A),4);
, ,-1. 6.236 1.764
Din algebră se ştie că pentru ficare valoare proprie a matricei există şi un vector
propriu x care stisface relaţia Ax = λx. Pentru matricea A, avem:
> vectori_proprii:=evalf(eigenvects(A,'radical'),4);
vectori_proprii [ ], ,6.236 1. { }[ ], ,1.412 1.981 1. [ ], ,1.764 1. { }[ ], ,-.0786 -3.981 1., , :=
[ ], ,-1. 1. { }[ ], ,1. 1. -1.
Menţionăm, rezultatul a fost afişat sub forma:
[num, r, {vector}]
Aici num este valoarea proprie a matricei, r – multiplicitatea valorii proprii, vector –
vectorul propriu, iar ‘radical’ este cheiea regimului de obţinere a tuturor valorilor proprii.
9.1.3.3. Metoda lui Gauss
Cu ajutorul comenzilor din pachetele linalg şi LinearAlgebra o matrice
poate fi transformată în diverse forme speciale. Astfel, cu ajutorul comenzii gausselim()
matricea A obţine forma triunghiulară. Metoda lui Gauss se foloseşte cu ajutorul comenzii
ffgausselim( ). Astfel, pentru matricea B se obţine:
> ffgausselim(B);
142
1 − 3 λ 5
0 − + 9 3 λ − − 13 λ0 0 − − + − 11 3 λ 7 λ2 λ3
O matrice poate fi redusă la forma triunghiulară şi cu ajutorul algoritmului lui
Gauss-Jordan:
> A := array( [[4,-5,3,-2],[-5,8,-1,2],[-2,3,2,1]] );
:= A
4 -5 3 -2
-5 8 -1 2
-2 3 2 1
> gaussjord(A, 'r'); # Aici r este rangul matricei
1 0 0 -1
0 1 0-719
0 0 11
19
> r;
3
Mai jos prezentăm lista celor mai importante comenzi ale pachetelor linalg şi
LinearAlgebra (vezi tabelul 9.2).
Tabelul 9.2. Lista celor mai importante comenzi care operează cu matrice şi vectori
Denumirea comenzii Semnificaţie
delrows(A, i1..i2)/DeleteRow(A, i1..i2)
Omite liniile unei matrice
delcols(A, i1..i2)/DeleteColumn(A, i1..i2) Omite coloanele unei matrice
row(A,i)/Row(A,i) Selectează liniile unei matrice
col(A,i)/Column(A,i) Selectează coloanele unei matrice
submatrix(A,i1..i2,j1..j2)/SubMat
rix(A,i1..i2,j1..j2) Selectează o submatrice a matricei date
subvector(a,i1..i2)/SubVector(a,
i1..i2)
Selectează o porţiune de coordinate a
vectorului
ScalarMultiply(A) Calculează produsul dintre o matrice/vector şi
143
un scalar
MatrixVectorMultiply(A) Calculează produsul scalar dintre o matrice şi un vector–coloană
VectorMatrixMultiply(A) Calculează produsul scalar dintre un vector-
linie şi o matrice
MatrixMatrixMultiply(A) Constituie produsul scalar a două matrice
inverse(A)/MatrixInverse(A) Determină matricea inversă
det(A)/Determinant(A) Calculează valoarea determinantului matricei
minor(A,I,j)/Minor(A,I,j) Calculează valoarea minorului matricei
eigenvals(A)/Eigenvalues(A) Calculează valorile proprii ale matricei
eigenvects(A)/Eigenvectors(A) Calculează vectorii proprii
9.1.4. Rezolvarea sistemelor de ecuaţii liniare cu Maple
Majoritatea operaţiilor cu matrice sunt concepute pentru rezolvarea sistemelor de
ecuaţii liniare. În această privinţă pachetul LinearAlgebra propune mai multe metode
şi mijloace pentru rezolvarea lor. Printre aceste metode amintim:
01 . inversarea matricei coeficienţilor sistemului de ecuaţii ( bAx *1−= ):
02 . aplicarea factorizării LU (method = ‘LU’);
03 . aplicarea decompoziţiei QR (method = ‘QR’);
04 . aplicarea metodei lui Cholesky (method = ‘Cholesky’);
05 . metoda substituţiei inverse (method = ‘subs’).
Exemple Să se determine soluţia sistemului de ecuaţii Ax = b pentru
−−−−−−
−−−
=
9125
4301
5853
5548
A şi
−−
=
5
8
0
4
b .
> white(LinearAlgebra):
144
> with(LinearAlgebra): A := <<8,3,-1,-5>|<4,-5,0,-2>|<-
5,8,3,-1>|
<-5,5,-4,-9>>: b:=<4,0,-8,-5>:
9.1.4.1. Metoda LU:
> x:=LinearSolve(A,b,method='LU');
:= x
17152607
-36682607
-1345869
17592607
Verificare:
> A.x-b;
0
0
0
0
Soluţia poate fi obţinută şi în cazul când se aplică decompoziţia LU:
> P,L,U:=LUDecomposition(A);
:= , ,P L U , ,
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
1 0 0 0
38
1 0 0
-18
-113
1 0
-58
-113
-175163
1
8 4 -5 -5
0-132
798
558
0 016352
-21352
0 0 0-2607163
> v2:=Transpose(P).b;
145
:= v2
4
0
-8
-5
> v3:=ForwardSubstitute(L,v2);
:= v3
4
-32
-9913
-1759163
> x:=BackwardSubstitute(U,v3);
:= x
17152607
-36682607
-1345869
17592607
sau
x =
0.6578442654
-1.406981204
-1.547756041
0.6747219026
> A.x-b;
0
0
0
0
9.1.4.2. Metoda QR
146
> x:=LinearSolve(A,b,method='QR');
:= x
0.657844265439202380
-1.40698120444955865
-1.54775604142692692
0.674721902570003752
Verificare
> A.x-b;
0.888178419700125232 10-15
0.355271367880050094 10-14
0.266453525910037570 10-14
-0.177635683940025046 10-14
Altă modalitate, mai greoaie, este decompoziţia QR:
> Q,R:=QRDecomposition(A);
−−−−−−−−
−−−−−
−
=
79314.9000
92135.336111.400
46802.583181.813485.60
41209.240705.171360.294987.9
,
61231.060149.010373.050252.0
65738.074550.004446.010050.0
097667.001108.094838.030151.0
42824.028690.029640.080403.0
:, RQ
> v2:=Transpose(Q).b;
:= v2
-6.53274579918487941
1.34848114757230774
4.10412266118843050
-6.60764769791746431
> v3:=BackwardSubstitute(R,v2);
:= v3
0.657844265439202380
-1.40698120444955865
-1.54775604142692692
0.674721902570003752
> A.x-b;
0.888178419700125232 10-15
0.355271367880050094 10-14
0.266453525910037570 10-14
-0.177635683940025046 10-14
147
În cazul de faţă exactitatea e cu mult mai mare decât în cazul când se aplică funcţia
(comanda) LinearSolve( ).
9.1.4.3. Metoda lui Cholesky:
> x:=LinearSolve(A,b,method='Cholesky');
Error, (in LinearAlgebra:-LA_Main:-LinearSolve) Matrix
is not positive-definite
Soluţia nu poate fi calculată prin metoda lui Choletsky deoarece matricea dată A nu
este pozitiv definită.
9.2. Grafică Maple
Comenzile sistemului Maple pentru repreyentarea graficelor funcţiilor sunt grupate
în pachetul plots. Sistemul prevede şi comenzi cu ajutorul cărora poate fi urmărit mersul
rezolvării problemei sau a trasării graficului unei funcţii (vezi § 9.4). Printre posibilităţile
grafice ale sistemului Maple, amintim:
• trasarea graficului unei funcţii de o variabilă reală, a unei funcţii date parametric, a
funcţiilor implicite;
• construirea suprafeţelor definite de funcţii dependente de două variabile;
• construirea obiectelor grafice (cerc, sferă, segment, dreptunghi, triunghi etc.) şi
manipularea cu ele;
• construirea graficelor în mişcare (animaţie) pe plan şi în spaţiu.
Înainte de toate, prezentăm fără comentarii un exemplu simplu de trasare a graficului unei
funcţii f(x), ],[ bax ∈ .
Exemplu
148
Să se reprezinte graficul funcţiei 5
sin2sin)( 2 xxxf −= pentru ],
2[ ππ−∈x .
> f:=sin(x)^2-2*sin(x/5):plot(f(x),x=-Pi/2..Pi,y=-0.5..1.,
thickness=2,color=black); # Graficul funcţiei este cel din fig. 9.1.
Fig. 9.1
9.2.1. Grafică 2d
Cele mai solicitate comenzi ale sistemului Maple sunt comenzile plot( ) şi
plot3d( ) care intervin la construirea graficelor pe plan şi în spaţiu, motiv pentru care fac
parte din nucleul sistemului.
Sintaxa comenzii plot( ) are forma
plot(f, h, v, opţiune),
unde f este funcţia dată, h şi v sunt domeniile de variaţie ale variabilei independente
(x) şi variabilei dependente (y), iar opţiune este o listă de parametri care determină forma
graficului: grosimea, culoarea, tipul liniilor graficului, tipul axelor sistemului de coordonate
etc.
Pentru scoaterea mai multor grafice pe aceleaşi axe de coordonate în calitate de
prim argument al comenzii se va scrie o listă de funcţii.
Exemplu
149
Să se reprezinte graficele funcţiilor 5
sin2sin)( 2 xxxf −= şi
xexg x sin2)( 2 ⋅= − , ],2
[ ππ−∈x pe aceleaşi axe de coordinate.
> f:=sin(x)^2-2*sin(x/5):g:=2*exp(-2*x)*sin(x): plot([f,g],
x=-Pi/2..Pi,- 0.5..1,color=[black,black],
linestyle=[4,1],
labels=["x","Grafice"],title=" Afişarea\n f(x) şi g(x)
pe
aceleaşi axe",legend=["f(x)","g(x)"],thickness=2);
Fig. 9.2
Cu plot( ) se reprezentă şi puncte pe plan dacă acestea se scriu sub forma unei
liste de liste şi se impune condiţia style = POINT. Dacă însă condiţia style =
POINT, pe foaia de lucru va apărea o linie frântă care uneşte punctele listei.
Exemplu
150
Să se reprezinte punctele listei 1l = [[-1, 0,3],[-0,5, -0,1], [0, 0,4], [0,5, -0,2], [1, 0,3] ,
[1,5, 0,1]] pe plan cu şi fără condiţia style = POINT.
> l[1]:=[[-1,.3],[-0.5,-.1],[0, .4],[.5, -.2],[1, .3],[1.5,.1]]:
plot(l[1],axes=normal,style=POINT,color=black,symbol=DI
AMOND,
symbolsize=30,title="Puncte pe plan"); # Vezi fig. 9.3.
> plot(l[1],axes=normal,color=black,
symbolsize=30,thickness=2);
# Vezi fig. 9.4.
151
Fig. 9.3 Fig. 9.4
Pentru obţinerea graficului unei funcţii parametrice ( )(tx ϕ= şi )(ty φ= ,
],[ bat ∈ ) comanda plot( ) se scrie sub forma:
> plot( ],..),(),([ battt =φϕ <opţiuni>);
Exemplu
Să se reprezinte graficul funcţiei ]2,0[,5cos,3sin π∈== ttytx .
> x:=sin(3*t):y:=cos(5*t):plot([x(t),y(t),t=0..2*Pi],
color=black, thickness=2); # Graficul este cel din fig. 9.5.
152
Fig. 9.5
9.2.2. Grafică 3d
Graficul funcţiei de două variabile z = f(x, y) poate fi obţinut cu ajutorul comenzii
plot3d( ), comandă cunoscută sub următoarele formate:
plot3d(expresie, x=a..b, y=c..d, p)
plot3d(f, a..b, c..d, p)
plot3d([expresiaf, expresiag, expresiah], s=a..b, t=c..d, p)
plot3d([f, g, h], a..b, c..d, p)
Primele două formule construiesc graficul unei suprafeţe, a doua şi a treia – grafice
pentru funcţii date parametric. Aici a, b, c şi d sunt constante numerice sau expresii de
tip real, p este un parametru care poate fi: axefont, font, color, coords,
labelfont, thickness, style, symbol, title, linestyle, etc.
Exemplu
Să se construiască graficul funcţiei ],[,,3cos2sin ππ−∈+= yxxyxxz .
> plot3d(x*sin(2*y)+y*cos(3*x),x=-Pi..Pi,y=-Pi..Pi);
153
Fig. 9.6
Pentru funcţiile implicite 0),,( =zyxF graficul se obţine cu ajutorul comenzii
implicitplot3d( ).
Exemplu
Pentru funcţia ]2,2[,,,4222 −∈=++ zyxzyx avem sfera din fig. 9.7.
> with(plots):implicitplot3d(x^2+y^2+z^2=4,x=-2..2,y=-
2..2,z=-
2..2,scaling=CONSTRAINED,color=black,style=hidden);
154
Fig. 9.7
9.3. Pachete pentru aplicaţii în geometrie
Pentru manipularea cu pachetele cu aplicaţii în geometrie Maple dispune de
pachetele geometry şi geom3d. Primul se referă la geometria euclidiană (geometria
2D), iar cel de al doilea – la geometria din spaţiu (geometria 3D). Obiectele geometrice
sunt caracterizate de diverşi parametri.
Înainte de a începe lucrul, pachetele geometry şi geom3d trebuie încărcate.
Structurile geomeztrice definite sau determinate acţionează doar în cadrul pachetului
respectiv.
9.3.1. Pachetul geometry
Pachetul geometry conţine peste o sută de comenzi care intervin în planimetrie.
Obiectele geometrice se definesc în mod obişnuit: punctul este definit de
coordonatele sale (comanda point), dreapta – de două puncte sau de o ecuaţie (comanda
155
line), cerc (circle) – prin trei puncte sau o ecuaţie sau de centrul şi raza (diametrul)
lui.
Exemple Pentru un cerc dat de trei puncte distincte să se determine coordonatele centrului, raza şi
ecuaţia lui. Graficul poate fi obţinut cu comanda draw
> with(geometry):
> circle(c1,[point(A,0,0),point(B,2,0),
point(C,1,2)],'centername'=O1): center(c1),
coordinates(center(c1)); # Centrul şi coordonatele lui
,O1
,1
34
> radius(c1);evalf(%); # Raza cercului
116
25 16
1.250000000
> Equation(c1); # şi ecuaţia acestuia
= + − − x2 y2 2 x32
y 0
Cu ajutorul comenzii detail( ) se obţine descrierea completă a cercului c1, adică numele
obiectului, forma lui, numele centrului, coordinatele centrului, raza cercului şi ecuaţia
cercului.
Figuri geometrice interesante pot fi obţinute cu ajutorul translării, rotaţiei şi
deformării figurilor geometrice de bază.
156
Exemplu > with(geometry):
> point(P, 2 , 0), point(Q, 1, 0);
P, Q
> rotation(P1,P,Pi,'counterclockwise');
P1
> coordinates(P1);
[-2, 0]
> rotation(P2,P, Pi/2,'clockwise', Q);
P2
> coordinates(P2);
[1, -1]
> f:=y^2=x: parabola(p,f,[x,y]): point(OO,0,0):
rotation(p1,p,Pi/2,'counterclockwise',OO):
detail({p1,p});
name of the object: p{
form of the object: parabola2d
vertex: [0, 0]
focus: [1/4, 0]
directrix: 1/4+x = 0
equation of the parabola: y^2-x = 0 name of the object: p1,
form of the object: parabola2dvertex: [0, 0]
focus: [0, 1/4]
directrix: 1/4+y = 0
equation of the parabola: x^2-y = 0 }
> rotation(p2,p,Pi,'counterclockwise',OO):
rotation(p3,p,Pi/2,
'clockwise',OO):
draw([p(style=LINE,thickness=2),p1,p2,p3],
style=POINT,symbol=DIAMOND,color=green, title=`Rotaţia unei
157
parabole`);# Graficul este cel din fig. 9.8
Fig. 9.8
Mijloacele sistemului Maple sunt comode pentru vizualizarea figurilor care se
construiesc.
Exemplu Prezentăm ilustrarea teoremei lui Pitagora, folosind comanda construcţiei unui poligon
(vezi fig. 9.9):
> with(plots):with(geometry):with(student):a:=3;b:=5;
5:
3:
=
=
b
a
> display(polygonplot([[0,0],[b,0],[0,a]],color=grey), polygonplot([[b,0],[a+b,0],[a+b,b]],color=turquoise),
polygonplot([[a+b,b],[a+b,a+b],[a,a+b]],color=green),
polygonplot([[0,a],[a,a+b],[0,a+b]],color=cyan),
polygonplot({[[b,0],[a+b,b],[a,a+b],
[0,a]]},color=yellow),
158
scaling=constrained);
Fig. 9.9
9.3.2. Pachetul geom3d
Comenzile pachetului geometriei tridimensionale geom3d sunt asemen[toare
comenzilor geometriei bidimensionale (pachetul geometry). Pentru determinarea unui
punct, a unei linie, a unui plan sau a unei sfere utilizatorul poate apela la funcţiile point,
line, plane şi sphere. De asemenea poate fi definit un segment (segment), un
segment orientat (dsegment), un triunghi (triangle), precum şi un număr mare de
poligoane, de exemplu, cu comanda tetrahedron poate fi creată o piramidă
Menirea multor funcţii ale pachetului geom3d rezultă din denumirea funcţiilor, iar
caracterul aplicării este analog celui descris pentru pachetul geometry. Având în vedere
cele spuse ne mărginim doar la prezentarea a două exemple: în fig.9.10 este reprezentată o
159
sferă în interiorul unui dodecadron, iar în fig.9.11 – două figuri în spaţiu, unde una este
inclusă în cealaltă.
Fig. 9.10
Exemple > with(geom3d): point(o,0,0,0): r := 1.:
> SmallStellatedDodecahedron(p,o,r):
> duality(dp,p,sphere(s,[o,MidRadius(p)])):
draw([p(color=pink),dp(color=blue)],cutout=8/9,lightmod
el=
light4, title=`Sfera în interiorul unui dodecadron `,
orientation=[-4,32]);
160
> TruncatedIcosahedron(tric,point(o,0,0,0),2.): draw(tric,
cutout=7/8,lightmodel=light4):
> dodecahedron(dode,o,2.): rad:=1.5:SnubDodecahedron(sdode
o,rad): draw([sdode(color=yellow),dode(color= coral,
cutout=
8/9)], style=patch,lightmodel=light2, orientation=[-
71,56]);
Fig. 9.11
9.4. Pachetul student
Acest pachet a fost elaborat special pentru studenţi şi elevi pentru a prezenta pas cu
pas realizările metodelor matematice. Funcţiile pachetului sunt solicitate şi de multe
persoane preocupate de utilizarea metodelor matematice în activitatea lor.
161
Funcţiile pachetului în majoritatea lor coincid cu denumirile acestora şi au
semnificaţiile de mai jos:
■ D – operatorul diferenţial;
■ Diff – forma inertă a comenzii calculării derivatei;
■ Doubleint (Tribleint)– forma inertă a comenzii calculării integralei duble
(triple);
■ Int – forma inertă a comenzii calculării integralei;
■ Limit – forma inertă a comenzii calculării limitei;
■ Product – forma inertă a comenzii calculării produsului termenilor
unu şirului;
■ Sum – forma inertă a comenzii calculării sumei termenilor unui şir;
■ changevar – schimbul de variabile;
■ completesquarte – calculează un patrat complet;
■ distance – calculează distanţa dintre două puncte;
■ integrand – extrage expresia de sub semnul integralei;
■ intercept – calculează punctul de intersecţie a două curbe;
■ intparts – integrare prin părţi;
■ leftbox(rightbox) – ilustrarea grafică a integrării prin metoda
dreptunghiurilor din stânga (din dreapta);
■ leftsum(rightsum) – aproximaţia numerică a integralei cu
dreptunghiuri din stânga (din dreapta);
■ middlebox – ilustrarea grafică a integrării prin metoda
dreptunghiurilor centrale;
■ showtangent – determină graficul funcţiei şi a tangentei acesteia;
■ simpson – calculează integrala prin metoda lui Simpson;
■ slope – calculează şi trasează tangenta funcţiei într-un punct;
■ trapezoid – calculează integrala prin metoda trapezului.
Exemple > with(student):
162
> Tripleint(g(x,y,z),x,y,z);
Tripleint(x^2*y*z,x=0..1,y=0..2,z=0..3);
d⌠⌡
d⌠⌡
d⌠⌡
( )g , ,x y z x y z
d⌠
⌡
0
3
d⌠⌡
0
2
d⌠⌡
0
1
x2 y z x y z
> evalf(%);
3.000000000
> int(int(int(x^2*y*z,x=0..1),y=0..2),z=0..3);
3
> Tripleint(1,x=0..1,y=0..2,z=0..3);
d⌠⌡
0
3
d⌠⌡
0
2
d⌠⌡
0
1
1 x y z
> evalf(%);
6.000000000
> Tripleint(x+y+z,x=0..a,y=0..b,z=0..c);
d⌠⌡
0
c
d⌠⌡
0
b
d⌠⌡
0
a
+ + x y z x y z
> int(int(int(x+y+z,x=0..a),y=0..b),z=0..c);
+ + 12
a2 b c12
a b2 c12
a b c2
> Doubleint(x^2/(1+y^2),x=0..1,y=0..1);
int(int(x^2/(1+y^2),x=0..1),y=0..1);
d⌠
⌡
0
1
d⌠
⌡
0
1
x2
+ 1 y2x y
112
π
> evalf(%%);
0.2617993878
163
Pentru studenţi şi elevi pachetul student a fost extins cu scopul de a acoperi cât
mai multe domenii din matematică. Astfel, versiunea Maple 9 în plus la pachetul student
conţine un şir de pachete de genul acestuia, ca, de exemplu, pachetele Student,
Student[LinearAlgebra], VectorCalculus, Student[Calculus1],
Student[Precalculus], VarationalCalculus ş.a. destinate disciplinelor
Calculus1 – 3 din planurile de învăţământ al universităţilor din SUA şi care se eliberează
de firma producătoare Waterloo Maple Inc. (vezi site-ul: www.maplesoft.com) la un preţ
redus tinerilor ce-şi continuă studiile.
În continuare, ilustrăm cum cu ajutorul unor comenzi ale acestor pachete se rezolvă
diverse probleme.
9.4.1. Rezolvarea unui sistem de inecuaţii
Pachetul plots conţine o funcţie grafică specială inequal( ), care conturează
domeniul soluţiilor unui sistem de inecuaţii.
Exemplu Să se determine domeniul soluţiilor sistemului de inecuaţii
+< =< =−
−>+
.1,02
,1
,1
xy
yx
yx
> with(plots): inequal( {x+y>-1,x-y<=1,y<=2+.1*x},x=-
4..4,
y=-4..4,optionsfeasible=(color=magenta),optionsopen=
(color=white,thickness=3),optionsclosed=(color=black,
thickness=2),options excluded=(color=cyan)); # Domeniul
este cel din fig. 9.12, unde optionsfeasible redă culoarea domeniului
interior punctele căruia satisfac toate cele trei inecuaţii, optionsopen şi
optionsclosed redau culoarea frontierelor închise şi deschise a domeniului.
164
Fig. 9.12
9.4.2. Rezolvarea ecuaţiilor neliniare
Pentru rezolvarea ecuaţiei neliniare x = f(x) aplicăm metoda iteraţiilor simple
(iteraţiile succesive) )( 1−= kk xsx începând cu o valoare iniţială x0.
Exemplu
Să se determine soluţia ecuaţiei xx =+ )1ln(3 .
> f:=x->3*ln(x+1);x||0:=0.5;
:= f → x 3 ( )ln + x 1
:= x0 0.5
> x0:=.5;
:= x0 0.5
> for k from 1 to 20 do x||k:=evalf(f(x||(k-1))); od;
165
:= x1 1.216395324
:= x2 2.387646445
:= x3 3.660406248
:= x4 4.617307866
:= x5 5.177557566
:= x6 5.462768931
:= x7 5.598173559
:= x8 5.660378631
:= x9 5.688529002
:= x10 5.701181910
:= x11 5.706851745
:= x12 5.709388956
:= x13 5.710523646
:= x14 5.711030964
:= x15 5.711257755
:= x16 5.711359134
:= x17 5.711404452
:= x18 5.711424708
:= x19 5.711433765
:= x20 5.711437812
Pentru a fi convinşi că iteraţiile xk converg către soluţia ecuaţiei, calculăm soluţia
acesteia cu comanda solve( ):
> f(x)=x;solve(%);
= 3 ( )ln + x 1 x
,0 − − 3
LambertW ,-1 −13
1
e( )/1 3
1
Rezultatul pare neobişnuit: rădăcina evidentă 0 şi o rădăcină sub forma funcţiei
speciale a lui Lambert. Cunoaştem , comanda evalf( ) poate calcula valoarea numerică
a rădăcinei a doua:
> evalf(%);
,0. 5.711441084
Se observă că 5,711441084 şi x20 = 5,711437812 sunt aproape egale (în limita a 5
cifre semnificative).
166
9.4.3. Reprezentarea iteteraţiilor lui Newton sub formă simbolică
În Maple, în general, cine caută găseşte, adică nu există problemă simplă pentru
care să nu existe o interpretare grafică sau de altă natură. Ca să fim convinşi de cele spuse,
pentru demonstrarea rezolvării problemei cu metoda analitică, vom recurge la exemplul
care a devenit clasic – realizarea metodei lui Newton pentru rezolvarea ecuaţiei neliniare
f(x) = 0.
După cum se ştie, metoda lui Newton (sau iteraţiile lui Newton)se reduce la
calcularea rădăcinii prin intermediul formulei
)(
)(1
i
iii xf
xfxx
′+=+ , i = 1, 2, … .
Pentru realizare procedeului determinării soluţiei în conformitate cu iteraţiile de mai
sus, compunem programul ce urmează:
> restart: N1:=proc(expr,x)
local iter;
iter:=x-expr/diff(expr,x);
unapply(iter,x)
end;
:= N1 proc( ) end proc,expr x local ;iter ; := iter − x /expr ( )diff ,expr x ( )unapply ,iter x
Pentru obţinerea formulei iteraţionale sub forma analitică în programul de mai sus
este inclusă funcţia (comanda) unapply( ). Acum, considerând funcţia, rădăcina căreia
trebuie calculată, obţinem expresia analitică:
> expr:=sin(x)^2-.5;
:= expr − ( )sin x 2 0.5
> F:=N1(expr,x);
:= F → x − x12
− ( )sin x 2 0.5( )sin x ( )cos x
Considerând o valoare iniţială x0 , pot fi calculate o parte a iteraţiilor:
167
> x0:=0.2;
:= x0 0.2
> to 7 do x0:=F(x0);od;
:= x0 1.382611210
:= x0 0.117460944
:= x0 2.206529505
:= x0 2.360830634
:= x0 2.356194357
:= x0 2.356194490
:= x0 2.356194490
Se observă un salt la începutul iteraţiilor, iar apoi valorile rădăcinii converg către
rezultatul final, adică către soluţia ecuaţiei. Ultimile două iteraţii demonstrează acest fapt.
Deşi ecuaţia are două rădăcini, procedeul propus prezintă doar o soluţie. Obţinerea
altor rădăcini depinde de valoarea iniţială: iteraţiile lui Newton converg dacă valoarea
iniţială se află în vecinătatea soluţiei ecuaţiei.
168