Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AstronomieBiofizicaBiologieBotanicaCartiChimieCopii
Educatie civicaFabule ghicitoriFizicaGramaticaJocLiteratura romanaLogica
MatematicaPoeziiPsihologie psihiatrieSociologie


MapleV4 - scurta introducere

Matematica



+ Font mai mare | - Font mai mic



MapleV4 - scurta introducere

Maple este un sistem de calcul algebric (CAS) dezvoltat de firma Maplesoft (https://www.maplesoft.com), care poate fi utilizat in:



  1. calcule simbolice;
  2. calcule numerice;
  3. programarea unor metode numerice;
  4. reprezentari grafice.

In cele ce urmeaza, vom prezenta principalele elemente necesare in programarea unor metode numerice, corespunzatoare softului MapleV4

1.1. Reguli generale de introducere a comenzilor

Un document MapleV4 poate avea patru tipuri de campuri:

comenzi Maple (introduse de catre utilizator);

rezultate Maple (raspunsuri ale CAS-ului la comenzile introduse);

grafice (raspunsuri ale CAS-ului);

texte (introduse de catre utilizator).

In continuare, vom prezenta cateva reguli de introducere a comenzilor.

1. Orice comanda se termina cu ; (daca dorim sa afiseze rezultatul) sau: (daca nu dorim ca rezultatul sa fie afisat). De exemplu:

> sin(Pi);

> 1+3:

2. Asignarea se face cu : = , iar dezasignarea se face prin asignarea numelui variabilei. De exemplu, putem avea secventa:

> x:= 7;

x : = 7

> x := x + 1:

> x;

> x := 'x';

x : = x

> x;

x

3. Comentariile sunt precedate de caracterul #. De exemplu:

> x:=3; # se atribuie lui x valoarea 3

x

4. Maple face diferenta intre litere mici si litere mari:

> x:=3; X:=5; a:=X-x;

x

X : = 5

a : = 2

5. Secventele sunt scrise intre paranteze rotunde, ( ), listele intre paranteze patrate, [ ], iar multimile intre acolade, . De exemplu:

> secv:=(1,2,3); lista:=[2,1,2,3]; multime:=;

secv

lista

multime

6. Argumentele unei functii se pun intre paranteze rotunde, ( ) , iar indicii intre paranteze patrate, [ ].

> a:=cos(Pi); b:=lista[2];

a

b

7. Procentul, % , face referire la ultima comanda executat¡ anterior. De exemplu:

> a := 2;

a

> b:=%+1;

b

8. Daca rezultatul furnizat de Maple este identic cu comanda introdusa (Maple raspunde prin ecou la comanda), atunci aceasta arata ca Maple nu poate interpreta comanda introdusa. Pentru a remedia situatia, verificati daca ati introdus corect comanda sau daca nu cumva functia utilizata face parte dintr-un pachet care trebuie incarcat in prealabil.

> arctg(1); # o incercare de a calcula arctangenta de 1 arctg(1)

arctg(1)

> arctan(1); # apelarea corecta a funcției arctangenta

9. Pentru a nu retine eventuale atribuiri anterioare, este util ca pentru rezolvarea unei probleme noi sa incepem cu instructiunea

> restart;

1.2. Pachete de programe

Pachetele sunt colectii de functii care permit efectuarea de calcule specifice. Apelarea lor se face cu ajutorul comenzii with(nume_pachet). Pentru a apela o anumita functie dintr-un pachet, se foloseste sintaxa:

pachet['functie'](argumente)

Printre cele mai utilizate pachete sunt:

plots - pentru reprezentari grafice;

DEtools - pentru rezolvarea ecuatiilor diferentiale;

linalg - pentru rezolvarea unor probleme de algebra liniara; student - pentru analiza matematica.

De exemplu, la apelarea pachetului grafic, se obtine lista tuturor functiilor apelabile:

> with(plots);

Warning, the name changecoords has been redefined

[animate, animate3d, changecoords, complexplot, complexplot3d, conformal, contourplot, contourplot3d, coordplot, coordplot3d, cylinderplot, densityplot, display, display3d, fieldplot, fieldplot3d, gradplot, gradplot3d, implicitplot, implicitplot3d, inequal, listcontplot, listcontplot3d, listdensityplot, listplot, listplot3d, loglogplot, logplot, matrixplot, odeplot, pareto, pointplot, pointplot3d, polarplot, polygonplot, polygonplot3d, polyhedraplot, replot, rootlocus, semilogplot, setoptions, setoptions3d, spacecurve, sparsematrixplot, sphereplot, surfdata, textplot, textplot3d, tubeplot]

1.3. Constante, operatori si functii des utilizate

Constantele folosite de Maple sunt:

Constanta

Semnificatie

false

"fals"

true

"adevarat"

gamma

constanta lui Euler

infinity

+∞

Catalan

constanta lui Catalan

Fail

valoare de adevar necunoscuta

Pi

I

unitatea imaginara

NULL

secventa vida

Operatorii folositi frecvent sunt:

Operator

Sintaxa

Semnificatie

a+b a-b

suma a + b (diferenta a − b)

a*b 2*a

produsul a b, sau 2a

a/b

catul

a^b a**b

puterea ab

n!

factorialul 1 2 n

max min

max(a,b,c)

maximul (minimul) dintre a, b, c

min(a,b,c)

< <= > >= = <>

operatori booleeni

f:=expr

operatorul de asignare f = expr

=

a=b

ecuatia a = b

x=a..b

a ≤ x ≤ b

and or xor

operatori logici

implies not

Functii folosite frecvent in Maple:

Functie

Sintaxa

Semnificatie

sin cos tan cot

sin(x)

functii trigonometrice

arcsin arctan arccos

arctan(x)

ln log10

ln(x) log10(x)

logaritmi

exp

exp(x), exp(1)

functia exponentiala

sqrt

sqrt(x)

radical

abs

abs(x)

modul

1.4. Structuri de date: secvente, liste, multimi, siruri de caractere

1.4.1 Secvente

O secventa este o insiruire de expresii, separate prin virgule. Exista mai multe moduri de a defini o secventa:

a) direct:

> s:=1,2,3,4; t:=(a,b,c);

s

t:= a, b, c

b) cu ajutorul functiei seq:

> seq(3*x, x=2..7);

c) cu ajutorul unui ciclu for

Cu ajutorul functiilor min si max se poate calcula minimul, respectiv maxi-mul unei secvente.

> min(s); max(s,2,15);

Liste

O lista este o secventa de expresii, scrisa intre paranteze patrate, []. De exemplu, putem avea lista:

> ll:=[1,2,5,2,4,2,7,2,a,2,c];

ll := [1, 2, 5, 2, 4, 2, 7, 2, a, 2, c]

Putem afla numarul de operanzi din lista cu ajutorul functiei nops:

> nops(ll);

Al n-lea element din lista poate fi afisat cu una din comenzile op(n,ll) sau ll[n]

> aa:=ll[3]; bb:=op(9,ll);

aa

bb : = a

Functia member(elem, ll) returneaza true daca elementul respectiv se afla in lista ll, si false in caz contrar:

> member(d, ll);

false

Lista vida este desemnata prin

> lista:=[];

lista ]

Se poate adauga un element nou la lista ll astfel: [op(ll),elem]. De exemplu:

> lista:=[op(lista), d, e, f];

lista := [d, e, f ]

Se poate sterge al n-lea element din lista ll astfel: subsop(n=NULL,ll). De exemplu:

> lista:=subsop(2=NULL, lista);

lista := [d, f ]

Multimi

O multime este o secventa de expresii, scrisa intre acolade, , in care fiecare element figureaza o singura data. De exemplu:

ll:=; ll :=

Adaugarea unui nou element la multime, sau stergerea elementului de pe pozitia n se face la fel ca la liste.

Multimea vida este desemnata prin

Reuniunea a doua multimi se face utilizand operatorul union:

s:= : t:= :

> s union t;

Intersectia a doua multimi se realizeaza cu ajutorul operatorului intersect:

> s intersect t;

Diferenta a doua multimi se realizeaza utilizand operatorul minus:

> s minus t;

> s minus s;

1.4.4 Siruri de caractere

Sirurile de caractere sunt delimitate de apostrof invers ,', dupa cum urmeaza:

> 'acesta este un sir ';

acesta este un sir

Sirurile de caractere se pot concatena cu ajutorul comenzii cat. De exemplu, putem avea:

> i:=4;

i:= 4

> 'Valoarea lui i este ' cat( i);

Valoarea lui i este 4

Atentie! La concatenarea unui sir de cifre, se obtine un sir de caractere, nu un numar:

>        a:=cat(5,7,9); b:=52;

a:=579

b := 52

> whattype(a); # afla tipul expresiei a

symbol

>        whattype(b); # afla tipul expresiei b

integer

> a+b;

a :=579+52

>        whattype(a+b); # afla tipul expresiei a+b

symbol

1.5. Calcule cu matrice si vectori. Pachetul linalg.

Cu ajutorul cuvantului-cheie array se pot defini vectori si matrice.

Un vector se defineste in urmatorul mod:

> v:=array(1..dim_vect);

Elementele unui vector se pot defini unul cate unul, sau printr-un ciclu for (vezi sectiunea 1.7.1):

>        v:=array(1..4);

v:= array(1..4, [ ])

>        v[1]:=a; v[2]:=b; v[3]:=; v[4]:=3;

v1 := a

v2 := b

v3:=

v4 := 3

>        evalm(v); # evalueaza valoarea lui v

[a, b, , 3]

matrice se defineste astfel:

M:=array(1..nr_rand, 1..nr_col);

Elementele unei matrice se pot defini unul cate unul, sau printr-un ciclu for (vezi sectiunea 1.7.1):

> M:=array(1..2,1..2);

M := array

> M[1,1]:=1 : M[1,2]:=a : M[2,1]:=3 : M[2,2]:= :

> evalm(M); # evalueaza valoarea lui M

Un alt mod de a defini matrice si vectori, precum si de a efectua operatii specifice cu aceste obiecte, este folosirea pachetului linalg. Pachetul linalg se incarca astfel:

>        with(linalg);

Warning, the protected names norm and trace have been redefined and unprotected

[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp, QRdecomp, Wronskian, addcol, addrow, adj, adjoint, angle, augment, backsub, band, basis, bezout, blockmatrix, charmat, charpoly,cholesky, col, coldim, colspace, colspan, companion, concat, cond, copyinto, crossprod, curl, definite, delcols, delrows, det, diag, diverge, dotprod, eigenvals, eigenvalues, eigenvectors, eigenvects, entermatrix, equal, exponential, extend, ffgausselim, fibonacci, forwardsub, frobenius, gausselim, gaussjord, geneqns, genmatrix, grad, hadamard, hermite, hessian, hilbert, htranspose, ihermite, indexfunc, innerprod, intbasis, inverse, ismith, issimilar, iszero, jacobian, jordan, kernel, laplacian, leastsqrs, linsolve, matadd, matrix, minor, minpoly, mulcol, mulrow, multiply, norm, normalize, nullspace, orthog, permanent, pivot, potential, randmatrix, randvector, rank, ratform, row, rowdim, rowspace, rowspan, rref, scalarmul, singularvals, smith, stack, submatrix, subvector, sumbasis, swapcol, swaprow, sylvester, toeplitz, trace, transpose, vandermonde, vecpotent, vectdim, vector, wronskian]

O matrice se defineste cu comanda matrix:

>        matrix(nr_randuri, nr_coloane, lista_elem sau fc_generatoare)

Astfel, putem avea:

> a:=matrix(3,2,[1,2,3,4,5,6]);

a:=

Dar si

>        f:=(i,j)->i+j; # functia generatoare a elementelor matricei

f := (i, j) → i + j

>        b:=matrix(2,3,f); # adica b[i,j]=f(i,j)

b:=

Elementele aij se scriu a[i,j]. Astfel, pentru matricea a din exemplul anterior, putem avem:

>        a

a3,1

Un vector se defineste cu ajutorul comenzii vector: vector (nr_elem, lista_elem sau fc_generatoare)

Astfel, putem avea:

>        v:=vector([2,4,8,2]);

v

sau

>        f:=x-> 2*x+1;

f := x → 2x + 1

>        w:=vector(5,f); # adica w[i]=f(i)

w

Elementul i al vectorului v, vi, se scrie v[i]. Astfel, pentru vectorul v din exemplul anterior, putem avea:

> v[3];

Redam mai jos cele mai utilizate functii din pachetul linalg, impreuna cu descrierea lor. Pentru mai multe detalii referitoare la aceste functii, precum si la celelalte functii din pachetul linalg, se poate consulta pagina de help referitoare la pachetul linalg

Functie

Descriere

addcol(A,c1,c2,m)

inlocuieste coloana c2 a matricei A cu m*c1+c2

addrow(A,r1,r2,m)

inlocuieste linia r2 a matricei A cu m*r1+r2

adj(A) adjoint(A)

calculeaza matricea adjuncta a matricei A

angle(u,v)

calculeaza unghiul vectorilor u si v

augment(A,B)

concateneaza (alatura) matricile A si B pe orizontala

backsub(U,b)

rezolva sistemul Ux=b, prin substitutie inversa, unde U este o matrice superior triunghiulara

band(b,n)

construieste o matrice n x n care are pe diagonala principala elementele vectorului b, iar celelalte elemente sunt nule

cholesky(A)

efectueaza descompunerea Cholesky a matricei A

col(A,i) col(A,i..k)

extrage coloana i, respectiv coloanele i pana la k, din matricea A

coldim(A)

returneaza numarul de coloane ale matricei A

crossprod(u,v)

returneaza produsul vectorial al vectorilor u si v

delcols(A,r..s)

sterge coloanele de la r la s din matricea A

delrows(A,r..s)

sterge liniile de la r la s din matricea A

det(A)

calculeaza determinantul matricei A

diverge(f)

calculeaza divergenta vectorului f

dotprod(u,v)

calculeaza produsul scalar al vectorilor u si v

exponential(A)

calculeaza eA

extend(A,m,n,x)

adauga m linii si n coloane matricei A, initializate cu x

forwardsub(L,b)

rezolva sistemul Lx=b prin substitutie inainte, unde L este o matrice inferior triunghiulara

gausselim(A)

efectueaza eliminarea gaussiana cu semipivot asupra matricei A

geneqns(A,x)

genereaza un sistem de ecuatii pornind de la matricea A si vectorul necunoscutelor x

genmatrix(sist, var)

genereaza matricea coeficientilor sistemului sist, in raport cu multimea variabilelor var

grad(expr, vect)

calculeaza gradientul expresiei expr, in functie de variabilele vect

inverse(A)

calculeaza inversa matricei A

matadd(A,B,c1,c2)

calculeaza c1*A+c2*B

minor(r,c)

calculeaza minorul de ordin (r,c) (elimina linia r si coloana c) din matricea A

mulcol(A,c,expr)

multiplica coloana c a matricei A cu expresia expr

mulrow(A,r,expr)

multiplica linia r a matricei A cu expresia expr

multiply(A,B)

efectueaza inmultirea matricelor A si B

norm(A)

calculeaza norma matricei A

normalize(v)

calculeaza versorul vectorului v

rank(A)

calculeaza rangul matricei A

row(A,i) row(A,i..j)

extrage linia i, respectiv liniile de la i la j, ale matricei A

rowdim(A)

returneaza numarul de linii din matricea A

scalarmult(A,s)

inmulteste toate elementele matricei A cu scalarul s

stack(A,B)

concateneaza matricele A si B pe verticala

submatrix(A,r1..r2,c1..c2)

extrage o submatrice a matricei A, intre liniile r1 r2, si coloanele c1 c2

subvector(A,r1..r2)

extrage un subvector al vectorului A, de la rangul r1 la rangul r2

swapcol(A,c1,c2)

interschimba coloanele c1 si c2 ale matricei A

swaprow(A,r1,r2)

interschimba liniile r1 si r2 ale matricei A

trace(A)

calculeaza urma matricei A

vectdim(v)

returneaza dimensiunea vectorului v

1.6. Grafice

Graficul unei functii se realizeaza folosind comanda plot, a carei sintaxa este

plot(functie, x=x_min..x_max, y_min..y_max)

unde argumentul y_min..y_max este optional.

De exemplu, putem avea:

> plot(sin(x), x=-5..5);

> plot(cos(x)^2, x=-5..5);

> plot([sin(x),cos(x)^2], x=-5..5);

Mai multe detalii despre grafice se pot gasi accesand pagina de help referitoare la instructiunea plot, sau la pachetul plots

Elemente de programare

Conditionarea si ciclarea

A. Conditionarea

Sintaxa unei instructiuni conditionale este

if CONDITIE then EXPRESIE

elif CONDITIE then EXPRESIE ]

else EXPRESIE ]

fi

Instructiunile puse intre paranteze patrate, [ ], sunt optionale. De exemplu, putem avea secventa:

>        if a<0 then -a else a fi; # pentru calculul modulului pentru a returna modulul numarului a.

Un alt exemplu este dat de secventa:

> if x<0 then -1 elif x=0 then 0 else 1 fi; # functia signum pentru a returna semnul unui numar (functia sgn).

B. Ciclarea

O instructiune repetitiva poate avea una din urmatoarele doua sintaxe:

[for CONTOR ] [ from EXPR ] [ by EXPR ] [ to EXPR ]

while EXPR ]

do INSTRUCTIUNI od;

sau

[for CONTOR ] [ in EXPR ] [ while EXPR ] do INSTRUCTIUNI od;

unde:

from indica punctul de plecare in iteratie (daca este omis, valoarea sa implicita este 1);

- by indica pasul contorului (daca este omis, se considera implicit ca are valoarea 1);

- to indica punctul de oprire a iteratiei (daca este omis, se considera implicit ca are valoarea +∞ si se obtine o bucla infinita);

- while indica o expresie booleana, care trebuie sa poata fi evaluata ca adevarata sau falsa;

- in indica elementele succesive ale expresiei EXPR

De exemplu, pentru a scrie toate numerele pare de la 6 la 100 putem folosi:

> for i from 6 by 2 to 100 do print(i) od;

Cu ajutorul buclei for se pot defini secvente, liste, multimi, vectori sau matrice.

> s:=NULL;

s

> for i from 1 to 3 do s:=s,2*i+1 od; # definirea unei secvente

s

s

s

> l:=[];

l

> for i from 1 to 4 do l:=[op(l),i^2] od; # definirea unei liste

l

l

l

l

> v:=vector(3); # definirea vectorului

v := array(1..3, [ ])

> for i from 1 to 3 do v[i]:=i^3-i^2+1 od; # definirea elem vect evalm(v); # vizualizarea vectorului

v1 :=

v2 :=

v3:=

> M:=array(1..3,1..4); # definirea matricei

M:= array(1..3, 1..4, [ ])

>        for i from 1 to 3 do # definirea elem matricei

for j from 1 to 4 do

M[i,j]:=i^j

od;

od;

> evalm(M);

Putem afisa elementele unei liste (secvente, multimi, matrice, vector) astfel:

> lista:=[3,2,4,5,1]:

> for i in lista do print(i) od;

Mai multe detalii despre instructiunile de conditionare si de ciclare se pot gasi accesand pagina de help referitoare la acestea.

Functii si proceduri

O functie poate fi definita cu ajutorul operatorului ->. Putem defini functii de o variabila sau functii de mai multe variabile.

> f:=x->x^2+1;

f := xx2 + 1

> g:=(x,y)->x^2+y;

g := (x, y) → x2 + y

> f(3);

> g(3,4);

> g(4,3);

O procedura este un grup de instructiuni, variabile si constante. Sintaxa este:

proc (ARGUMENTE)

local VARIABILE_LOCALE;

global VARIABILE_GLOBALE;

options OPTIUNI;

description SIR_DE_CARACTERE;

INSTRUCTIUNI;

end;

O procedura returneaza ultimul rezultat obtinut. Pentru a forta returnarea unui alt rezultat, se foloseste RETURN. De asemenea, pentru a returna un mesaj de eroare, se foloseste ERROR

De exemplu, putem defini procedura:

> modul:=proc(a) if a<0 then -a else a fi; end;

modul := proc(a) if a < 0 then −a else a end if end proc

pe care o putem apela astfel:

> modul(-3);

Un alt exemplu de procedura este urmatorul:

> ec2:=proc(a,b,c)

local delta,x1,x2;

description 'Rezolvarea ecuatiei de gradul 2';

delta:=b^2-4*a*c;

if delta>0 then

x1:=(-b+sqrt(delta))/(2*a);

x2:=(-b-sqrt(delta))/(2*a);

RETURN(x1,x2);

elif delta=0 then RETURN(-b/(2*a));

else

RETURN('ecuatia nu ere solutii reale');

fi;

end:

care produce urmatoarele rezultate:

> ec2(1,6,9); # ecuatia x^2+6*x+9=0

> ec2(1,2,9); # ecuatia x^2+2*x+9=0 ecuatia nu are solutii reale

ecuatia nu are solutii reale

> ec2(1,2,-3); # ecuatia x^2+2*x-3=0

Pentru a defini tipul unui argument, se foloseste sintaxa

argument::tip.

De exemplu, sa luam urmatoarea procedura si situatiile care pot aparea:

> # procedura care returneaza determinantul unei matrice

> determinant:=proc(A) RETURN(det(A)) end:

> determinant(2);

Error, (in linalg:-det) expecting a matrix

Procedura determinant se poate "imbunatati" astfel:

> determinant1:=proc(A)

if not type(A, matrix)

then ERROR('argumentul trebuie sa fie matrice!!!')

fi;

RETURN(det(A))

end:

care produce urmatorul rezultat:

> determinant1(2);

Error, (in determinant1) argumentul trebuie sa fie matrice!!!

Se mai poate defini argumentul A ca fiind de tipul matrice:

> determinant3:=proc(A::matrix) RETURN(det(A)) end: # si se obtine urmatorul rezultat:

determinant3(2);

Error, invalid input: determinant3 expects its 1st argument, A, to be of type matrix, but received 2

Mai multe detalii despre tipurile existente se pot gasi accesand pagina de help (cuvantul cheie este type).

Un alt exemplu este procedura rdc, procedura pentru calculul lui

> rdc:=proc(x)

if x<0 then ERROR('numar negativ!')

elif x=0 then RETURN(infinity)

else simplify(x^(-1/2));

fi;

end;

> rdc := proc(x) if x < 0 then ERROR('numar negativ!')

elif x = 0 then RETURN(∞)

else simplify(1/(xˆ (1/2))) end if end proc

> rdc(-1);

Error, (in rdc) numar negativ!

> rdc(0);

> rdc(4);

Pentru a putea urmari executia unei proceduri, se foloseste debug, iar pentru a stopa urmarirea, se foloseste undebug. De exemplu, putem avea:

> f:=proc(a,b)

local y,z;

y:=a+b/2;

z:=1/y;

RETURN(y+z)

end;

> f := proc(a, b)

local y, z;

y := a + 1/2 b; z := 1/y

RETURN(y + z) end proc

> debug(f);

f

> f(2,4);

> f(0,1);

undebug(f)

f

> f(10,20);

Alte detalii despre functii si proceduri, precum si despre optiunile debug si undebug, puteti gasi pe paginile de help referitoare la acestea.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1346
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved