Rezolvarea ecuatiilor si sistemelor liniare cu diferente Ecuatiile cu diferente liniare si sistemele de ecuatii cu diferente liniare cu coeficienti constanti pot fi rezolvate in MAPLE cu ajutorul comenzii rsolve si are urmatoarea structura rsolve(eqns, fcns) unde eqns - variabila ce contine ecuatia sau ecuatiile sistemului fcns - variabila ce specifica necunoscuta sau necunoscutele in raport cu care se rezolva ecuatia sau sistemul de ecuatii Exemplul 1. Sa se determine solutiile generale ale ecuatiilor: a), n = 0, 1, 2,... b), n = 0, 1, 2,... c) d) e) > ec_a:=x(n+1) = (n+1)*x(n)+2^n*factorial(n+1); > rsolve(ec_a,x(n)); > ec_b:= x(n+1) = (1/2)*x(n)+1; > rsolve(ec_b,x(n)); > ec_c:=x(n+2)-5*x(n+1)+6*x(n)=4*n-2; > sol:=rsolve(ec_c,x(n)); > ec_d:=x(n+2)-5*x(n+1)+6*x(n)=4^n*(a*n+b); > sol:=rsolve(ec_d,x(n)); 1
In cazul radacinilor complexe comanda rsolve returneaza solutia in teremenii puterilor radacinilor complexe, coeficientii fiind si ei numere complexe. Pentru a obtine solutia ca sir de numere reale trebuiesc utilizate comenzile evalc (evalueaza o expresie de numere complexe) si expand (pentru desfacerea parantezelor si reducerea termenilor asemenea). > ec_e:=x(n+2)+x(n+1)+x(n)=13*3^n; > sol:=rsolve(ec_e,x(n)); > evalc(sol); > expand(evalc(sol)); In cazul in care dorim sa determinam solutiile unor ecuatii ce satisfac anumite conditii initiale se foloseste tot comanda rsolve dar se specifica si lista de conditii initiale Exemplul 2. Sa se determine solutiile ecuatiilor: a), b), c), d),, 2
> ec_a:=x(n+1) = (n+1)*x(n)+2^n*factorial(n+1); > rsolve({ec_a,x(0)=1},x(n)); > ec_b:= x(n+1) = (1/2)*x(n)+1; > rsolve({ec_b,x(0)=3},x(n)); > ec_c:=x(n+2)-5*x(n+1)+6*x(n)=4*n-2; > sol:=rsolve({ec_c,x(0)=0,x(1)=1},x(n)); > ec_d:=x(n+2)-5*x(n+1)+6*x(n)=4^n*(a*n+b); > sol:=rsolve({ec_d,x(0)=1,x(1)=1},x(n)); Pentru rezolvarea sistemelor de ecuatii se procedeaza similar cu deosebirea ca in loc de ecuatie se introduce lista de ecuatii ce formeaza sistemul, respectiv lista de necunoscute. Exemplul 3. Sa se determine solutiile sistemelor: a) b), > ec1:=x(n+1)=x(n)+y(n); > ec2:=y(n+1)=-2*x(n)+4*y(n); > sist_a:=ec1,ec2; > rsolve({sist_a},{x(n),y(n)}); 3
> ec1:=x(n+1)=2*x(n)+y(n); > ec2:=y(n+1)=2*y(n)+1; > sist_b:=ec1,ec2; > cond_initiale:=x(0)=1,y(0)=0; > rsolve({sist_b,cond_initiale},{x(n),y(n)}); Calculul matricii A n. Algoritmul lui Putzer Avem ca unde: s - numarul valorilor proprii ale matricii A matricea unitate,,..., iar coeficientii sunt solutii ale urmatoarelor ecuatii cu diferente,,,,, 3,..., Algoritm se determina valorile proprii ale matricii A se contruiesc matricile M(j), j = 0,..., s-1 se determina, j = 1,..., s, ca solutii ale ecuatiilor cu diferente corespunzatoare Exemplul 1 se calculeaza Sa se calculeze pentru > restart;with(linearalgebra): > A:=Matrix(1..3,1..3,[[0,1, 1],[-2, 3, 1],[-3, 1, 4]]); 4
> lambda:=eigenvalues(a); > lambda[1];lambda[2];lambda[3]; > E:=IdentityMatrix(3); > M[0]:=E; > M[1]:=(A-lambda[1]*E).M[0]; > M[2]:=(A-lambda[2]*E).M[1]; > ec1:=x(n+1)=lambda[1]*x(n); > sol:=rsolve({ec1,x(0)=1},x(n)); > u[1]:=unapply(sol,n); > ec2:=x(n+1)=lambda[2]*x(n)+u[1](n); > sol:=rsolve({ec2,x(0)=0},x(n)); > u[2]:=unapply(sol,n); > ec3:=x(n+1)=lambda[3]*x(n)+u[2](n); > sol:=rsolve({ec3,x(0)=0},x(n)); 5
> sol:=simplify(sol); > u[3]:=unapply(sol,n); > An:=sum(u[j](n)*M[j-1],j=1..3); > An:=simplify(An); Exemplul 2 (valori proprii complexe) Sa se calculeze pentru > A:=Matrix(1..3,1..3,[[0,-4, -16],[1, 4, 3],[1, 2, 4]]); > lambda:=eigenvalues(a); > polar(lambda[2]);polar(lambda[3]); > E:=IdentityMatrix(3); > M[0]:=E; > M[1]:=(A-lambda[1]*E).M[0]; 6
> M[2]:=(A-lambda[2]*E).M[1]; > ec1:=x(n+1)=lambda[1]*x(n); > sol:=rsolve({ec1,x(0)=1},x(n)); > u[1]:=unapply(sol,n); > ec2:=x(n+1)=lambda[2]*x(n)+u[1](n); > sol:=rsolve({ec2,x(0)=0},x(n)); > u[2]:=unapply(sol,n); > ec3:=x(n+1)=lambda[3]*x(n)+u[2](n); > sol:=rsolve({ec3,x(0)=0},x(n)); > sol:=simplify(sol); > u[3]:=unapply(sol,n); 7
> An:=sum(u[j](n)*M[j-1],j=1..3); 8
> An:=simplify(An); > evalc(an[1,1]); combine(evalc(an[1,1])); expand(combine(evalc(an[1,1]))); > for k from 1 to 3 do for l from 1 to 3 do An[k,l]:=expand(combine(evalc(An[k,l]))); end do; end do; > An; 9
> v[1]:=column(an,[1]); > v[2]:=column(an,[2]); > v[3]:=column(an,[3]); 10