11. calcule numerice cu polinoame - Sisteme de Programare pentru ...
11. calcule numerice cu polinoame - Sisteme de Programare pentru ...
11. calcule numerice cu polinoame - Sisteme de Programare pentru ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>11.</strong> CALCULE NUMERICE CU POLINOAME<br />
<strong>11.</strong>1. Polinoame. Funcţii raţionale.<br />
Funcţiile elementare sunt funcţii relativ simple, <strong>cu</strong> care se construiesc<br />
majoritatea funcţiilor compuse întâlnite în aplicaţii.<br />
Polinomul este cea mai simplă funcţie elementară, <strong>cu</strong> o singură variabilă şi<br />
poate fi exprimat prin următoarea formă generală:<br />
P<br />
n+<br />
1<br />
n+<br />
1−i<br />
n<br />
n−1<br />
k<br />
2<br />
( x)<br />
= ∑ Ai<br />
⋅ x = A1<br />
⋅ x + A2<br />
⋅ x + L + Ak<br />
⋅ x + L+<br />
An−1<br />
⋅ x + An<br />
⋅ x + An+<br />
1<br />
i=<br />
1<br />
un<strong>de</strong> x este variabila, reală sau complexă, iar A i, sunt coeficienţii polinomului, reali<br />
sau complecşi.<br />
Polinomul este o funcţie olomorfă (<strong>de</strong>rivabilă) pe orice domeniu mărginit.<br />
În Matlab, <strong>polinoame</strong>le sunt reprezentate printr-un vector linie, care conţine<br />
coeficienţii în ordinea <strong>de</strong>screscătoare a puterilor variabilei, având indicii <strong>de</strong> la 1 la<br />
n-1, <strong>cu</strong>m se observă şi din relaţia <strong>de</strong> mai sus.<br />
De exemplu, reprezentarea Matlab a polinomului,<br />
4<br />
3<br />
p1<br />
= 2 ⋅ x + 3⋅<br />
x + 4 ⋅ x + 5⋅<br />
x + 6 + 2⋅i<br />
este dată <strong>de</strong> vectorul,<br />
p1=[2 3 4 5 6+2i ].<br />
1<br />
2<br />
Se numeşte funcţie raţională un cât <strong>de</strong> două <strong>polinoame</strong>,<br />
n<br />
n−1<br />
k<br />
P(<br />
x)<br />
A1<br />
⋅ x + A2<br />
⋅ x + L + Ak<br />
⋅ x + L+<br />
An<br />
−1<br />
⋅ x<br />
R( x)<br />
= =<br />
p<br />
p−1<br />
k<br />
Q(<br />
x)<br />
B ⋅ x + B ⋅ x + L+<br />
B ⋅ x + L+<br />
B ⋅ x<br />
2<br />
k<br />
p−1<br />
2<br />
2<br />
+ A<br />
n<br />
+ B<br />
p<br />
⋅ x + A<br />
⋅ x + B<br />
În parti<strong>cu</strong>lar, dacă Q(x) este <strong>de</strong> gradul zero, R(x) se reduce la un polinom,<br />
<strong>de</strong>ci şi polinomul este o funcţie raţională. Se spune că polinomul este o funcţie<br />
raţională întreagă.<br />
Presupunem că <strong>polinoame</strong>le P(x) şi Q(x) nu au rădăcini comune, <strong>de</strong>ci fracţia<br />
R(x) este ireductibilă.<br />
Fie a, b, ..., l, rădăcinile polinomului Q(x) şi α , β , L , λ , ordinele lor <strong>de</strong><br />
multiciplitate. Polinomul Q(x), poate fi <strong>de</strong>scompus în factori sub forma,<br />
α<br />
β<br />
λ<br />
Q ( x) = B1<br />
⋅( x − a) ⋅( x − b) ⋅L ⋅ ( x − l) ; α + β + L+<br />
λ = p<br />
şi atunci funcţia R(x),<br />
n<br />
n−1<br />
P(<br />
x)<br />
A1<br />
⋅ x + A2<br />
⋅ x + L+<br />
An+<br />
1<br />
R( x)<br />
= =<br />
,<br />
Q(<br />
x)<br />
B ⋅( x − a) α ⋅( x − b) β ⋅L⋅( x − l) λ<br />
1<br />
este <strong>de</strong>finită <strong>pentru</strong> orice x, <strong>de</strong> modul finit, <strong>cu</strong> excepţia punctelor a, b, ..., l, în care<br />
numitorul ia valoarea zero.<br />
n+<br />
1<br />
p+<br />
1
Cal<strong>cu</strong>le <strong>numerice</strong> <strong>cu</strong> <strong>polinoame</strong> 243<br />
În orice domeniu mărginit, funcţia raţională nu are alte singularităţi <strong>de</strong>cât<br />
punctele în care numitorul ia valoarea zero, puncte în care funcţia nu este <strong>de</strong>finită.<br />
Aceste singularităţi, <strong>de</strong> fapt rădăcinile polinomului <strong>de</strong> la numitor, sunt poli, care, în<br />
cazul <strong>de</strong> mai sus, sunt a, b, ..., l. Ordinul <strong>de</strong> multiciplitate al fiecărui pol este egal<br />
<strong>cu</strong> ordinul <strong>de</strong> multiciplitate al rădăcinii respective, care, în cazul <strong>de</strong> mai sus, sunt<br />
α , β , L , λ .<br />
Funcţiile raţionale nu au alte singularităţi în tot planul, inclusiv în punctul <strong>de</strong><br />
la infinit, <strong>de</strong>cât poli.<br />
<strong>11.</strong>2. Operaţii <strong>cu</strong> <strong>polinoame</strong><br />
Cum polinomul este o funcţie elementară, <strong>pentru</strong> două <strong>polinoame</strong> P1(x) şi<br />
P2(x), sunt valabile operaţiile <strong>de</strong> la funcţii, respectiv:<br />
suma a două <strong>polinoame</strong> este tot un polinom, P(x)=P1(x)+P2(x);<br />
diferenţa a două <strong>polinoame</strong> este tot un polinom, P(x)=P1(x)-P2(x);<br />
produsul a două <strong>polinoame</strong> este tot un polinom, P(x)=P1(x) x P2(x);<br />
câtul a două <strong>polinoame</strong> este tot un polinom, P(x)=P1(x) : P2(x).<br />
Operaţiile aritmetice <strong>de</strong> adunare şi scă<strong>de</strong>re a <strong>polinoame</strong>lor presupun<br />
adunarea şi scă<strong>de</strong>rea coeficienţilor <strong>de</strong> acelaşi ordin.<br />
Esenţial, <strong>pentru</strong> a opera <strong>cu</strong> <strong>polinoame</strong> în Matlab, este faptul ca <strong>polinoame</strong>le<br />
să aibă acelaşi ordin, adică lungimea vectorilor coeficienţilor să fie aceeaşi. Din<br />
această cauză, polinomului <strong>cu</strong> grad mai mic i se vor completa coeficienţii <strong>cu</strong> zero.<br />
Dacă, <strong>de</strong> exemplu,<br />
4 3 2<br />
3 2<br />
p 1 ( x) = 2 ⋅ x + 3⋅<br />
x + 4⋅<br />
x + 1, p2 ( x) = 2 ⋅ x + 3⋅<br />
x + 2⋅<br />
x ,<br />
polinomul sumă este,<br />
4 3 2<br />
p s ( x) = p1 ( x) + p2<br />
( x) = 2⋅<br />
x + 5⋅<br />
x + 7 ⋅ x + 2⋅<br />
x + 1 ,<br />
iar polinomul diferenţă este,<br />
4 3 2<br />
p d ( x) = p1 ( x) − p2<br />
( x) = 2 ⋅ x + x + x − 2⋅<br />
x + 1.<br />
În Matlab, <strong>pentru</strong> a opera vectorii corespunzători lui p1 şi p2 sunt:<br />
p1 = [ 2 3 4 0 1]; p2= [0 2 3 2 0 ];<br />
astfel încât să poată să se efectueze,<br />
ps = p1+p2 = [ 2 5 7 2 1 ] şi pd = p1-p2 = [ 2 1 1 -2 1 ].<br />
Înmulţirea sau împărţirea unui polinom <strong>cu</strong> un scalar constă în mutiplicarea<br />
coeficienţilor acestuia <strong>cu</strong> un scalar, respectiv în înmulţirea unui vector, al<br />
coeficienţilor polinomului <strong>cu</strong> scalarul respectiv.<br />
Prin urmarea <strong>pentru</strong> a înmulţi polinomul P <strong>cu</strong> scalarul k, <strong>pentru</strong> a obţine<br />
polinomul P k , adică:<br />
n+<br />
1<br />
P ( x)<br />
= k ⋅ ∑ A ⋅ x<br />
k<br />
i=<br />
1<br />
i<br />
n+<br />
1−i<br />
=<br />
n+<br />
1<br />
∑( k ⋅ A )<br />
i=<br />
1<br />
i<br />
⋅ x<br />
n+<br />
1−i
244<br />
SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />
se înmulţesc numai coeficienţii polinomului <strong>cu</strong> scalarul k.<br />
Deoarece asupra scalarului k nu s-a fă<strong>cu</strong>t nici o restricţie, putem presupune că<br />
1<br />
acesta este <strong>de</strong> forma k = şi prin urmare, operaţia <strong>de</strong> înmulţire <strong>cu</strong> k este i<strong>de</strong>ntică<br />
r<br />
<strong>cu</strong> operaţia <strong>de</strong> împărţire a polinomului P(x) la r.<br />
În Matlab, înmulţirea polinomului p1 <strong>cu</strong> k=3, <strong>pentru</strong> a obţine polinomul p3,<br />
se scrie:<br />
p1 = [ 2 3 4 0 1]; k=3; p3 = k*p1 = [6 9 12 0 3 ],<br />
1 1<br />
iar înmulţirea <strong>cu</strong> k = = , respectiv împărţirea la r=5, se scrie:<br />
r 5<br />
p1 = [ 2 3 4 0 1]; k=1/5; p3 = k*p1 sau p3 = p1 / r = [0.4 0.6 0.8 0 0.2].<br />
Înmulţirea a două <strong>polinoame</strong>, u ( x)<br />
, v( x)<br />
este echivalentă unei operaţii <strong>de</strong><br />
convoluţie.<br />
Funcţia ce realizează convoluţii (multiplicări) <strong>de</strong> <strong>polinoame</strong> este conv, care<br />
se apelează <strong>cu</strong> sintaxa, w = conv(u,v) şi convoluţionează vectorii u şi v.<br />
Dacă m = length (u) şi n = length (v), atunci w, este un vector <strong>de</strong> lungime<br />
m+n-1, al cărui element k ,este:<br />
w( k)<br />
= ∑ u(<br />
j)<br />
v(<br />
k + 1−<br />
j)<br />
j<br />
Suma este <strong>pentru</strong> toate valorile lui j, ceea ce conduce la indici permişi <strong>pentru</strong><br />
u( j ) şi v(k+1-j), mai precis j = max(1,k+1-n): min(k,m). Când m=n , rezultă:<br />
w(1) = u(1)*v(1)<br />
w(2) = u(1)*v(2)+u(2)*v(1)<br />
w(3) = u(1)*v(3)+u(2)*v(2)+u(3)*v(1)<br />
...<br />
w(n) = u(1)*v(n)+u(2)*v(n-1)+ ... +u(n)*v(1)<br />
...<br />
w(2*n-1) = u(n)*v(n)<br />
Apelarea practică, în Matlab, <strong>pentru</strong> a înmulţi polinomul p1 <strong>cu</strong> polinomul p2,<br />
<strong>pentru</strong> a obţine polinomul pm se face <strong>cu</strong> secvenţa,<br />
p1 = [ 2 3 4 0 1]; p2= [0 2 3 2 0 ]; pm=conv(p1,p2),<br />
obţinând,<br />
pm = [0 4 12 21 18 10 3 2 0 ]<br />
p m x ,<br />
ceea ce corespun<strong>de</strong>, matematic, polinomului ( )<br />
7 6 5 4 3 2<br />
( x) = p ( x) ⋅ p ( x) = 4 ⋅ x + 12⋅<br />
x + 21⋅<br />
x + 18⋅<br />
x + 10⋅<br />
x + 3⋅<br />
x + 2⋅<br />
x<br />
p m<br />
1<br />
2<br />
Conform teoremei împărţirii <strong>cu</strong> rest a două <strong>polinoame</strong>, oricare ar fi<br />
<strong>polinoame</strong>le, u şi v ≠ 0 , există <strong>polinoame</strong>le unice, q şi r, astfel încât,<br />
u = v ⋅ q + r, grad r < grad v ,<br />
Polinomul u se numeşte <strong>de</strong>împărţit, v împărţitor, q cât şi r rest.
Cal<strong>cu</strong>le <strong>numerice</strong> <strong>cu</strong> <strong>polinoame</strong> 245<br />
Împărţirea sau divizarea a două <strong>polinoame</strong> este echivalentă unei operaţii <strong>de</strong><br />
<strong>de</strong>convoluţie, <strong>pentru</strong> care în Matlab, se utilizează funcţia <strong>de</strong>conv, care se apelează<br />
<strong>cu</strong> sintaxa:<br />
[q, r] = <strong>de</strong>conv (v,u),<br />
care realizează <strong>de</strong>convoluţia vectorilor u şi v (se împarte v la u), folosind o divizare<br />
prelungită. Câtul este restituit într-un vector q, iar restul ca un vector r, adică: v =<br />
conv (u, q) +r.<br />
Dacă u şi v sunt vectori <strong>cu</strong> coeficienţi polinomiali, a face convoluţia celor doi<br />
este echivalent <strong>cu</strong> a înmulţi cele două <strong>polinoame</strong>, iar <strong>de</strong>convoluţia este împărţirea<br />
<strong>polinoame</strong>lor. Rezultatul împărţirii lui v la u este câtul q şi restul r.<br />
Pentru,<br />
u = [1 2 3 4] ; v = [10 20 30];<br />
convoluţia este,<br />
c = conv(u,v) = [ 10 40 100 160 170 120 ].<br />
Pentru a ajunge din nou la u, se utilizează <strong>de</strong>convoluţia,<br />
[q,r] = <strong>de</strong>conv(c,u)<br />
rezultând,<br />
q = [ 10 20 30 ], r = [ 0 0 0 0 0 0]<br />
adică un cât egal <strong>cu</strong> q=v şi un rest r egal <strong>cu</strong> zero.<br />
<strong>11.</strong>3. Evaluarea <strong>polinoame</strong>lor<br />
Evaluarea <strong>polinoame</strong>lor este strâns legată <strong>de</strong> evaluarea funcţiilor. La funcţii,<br />
evaluarea se poate face într-un punct, lucrând <strong>cu</strong> scalari sau în mai multe puncte,<br />
lucrând vectorial sau <strong>cu</strong> tablouri.<br />
3 2<br />
Lucrând scalar, evaluarea polinomului f ( x)<br />
= 2 ⋅ x + x + 3⋅<br />
x + 1, <strong>pentru</strong><br />
x=2, se realizează <strong>cu</strong> secvenţa Matlab:<br />
x=2; f=2*x^3+x^2+3*x+1;<br />
rezultând f=27.<br />
În cazul lucrului <strong>cu</strong> tablouri, ce constituie specificitatea Matlab, programul se<br />
exe<strong>cu</strong>tă mai rapid <strong>de</strong>cât ansamblul <strong>cal<strong>cu</strong>le</strong>lor <strong>pentru</strong> fiecare valoare scalară în<br />
parte, dar, în acest caz, sintaxa evaluării presupune plasarea unui punct înaintea<br />
operatorilor înmulţire, împărţire sau ridicare la putere. Dimensiunea matricei în<br />
care se returnează valorile polinomului este i<strong>de</strong>ntică <strong>cu</strong> cea a matricei care conţine<br />
punctele în care se face evaluarea. Secvenţa <strong>de</strong> evaluarea a polinomului f(x), <strong>pentru</strong><br />
x=[-2 -1 0 1 2 3], în acest caz este:<br />
x = [-2 -1 0 1 2 3]; f = 2.*x.^3+x.^2+3.*x+1;<br />
rezultând, f = [-17 -3 1 7 27 73 ].<br />
De menţionat că punctele <strong>de</strong> evaluare x pot să aparţină unui interval, fiind<br />
distribuite uniform pe acesta şi astfel, polinomul se evaluează pe un interval, a-b,<br />
<strong>cu</strong> pasul dorit, x = a:pas:b.
246<br />
SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />
Special <strong>pentru</strong> evaluarea <strong>polinoame</strong>lor se utilizează funcţia polyval, care se<br />
apelează <strong>cu</strong> una dintre sintaxele:<br />
• y = polyval (p, x) restituie valoarea unui polinom <strong>de</strong> grad n evaluat la x,<br />
argumentul <strong>de</strong> intrare p este un vector <strong>de</strong> lungime n+1, ale cărui elemente<br />
sunt coeficienţii în ordine <strong>de</strong>screscatoare a puterilor polinomului ce este<br />
evaluat, iar x poate fi o matrice sau un vector şi atunci, funcţia polyval<br />
evaluează p la fiecare element a lui x;<br />
xˆ<br />
= x − µ µ în lo<strong>cu</strong>l lui x, cal<strong>cu</strong>lat<br />
• y = polyval (p, x, [], mu) foloseşte ( 1 ) / 2<br />
funcţie <strong>de</strong> µ 1 = mean (x) şi µ 2 = std (x), funcţia cal<strong>cu</strong>lând opţional şi<br />
parametrii <strong>de</strong> centrare şi <strong>de</strong> gradare mu = [µ 1, µ 2 ] ;<br />
• [y, <strong>de</strong>lta] = polyval (p, x, S) şi [ y, <strong>de</strong>lta] = polyval (p, s, S, mu) folosesc<br />
structura <strong>de</strong> ieşire opţională S, generată <strong>de</strong> polyfit <strong>pentru</strong> a produce erorile<br />
estimate, y ± <strong>de</strong>lta; dacă erorile din datele <strong>de</strong> intrare ale funcţiei polyfit<br />
sunt in<strong>de</strong>pen<strong>de</strong>nte, <strong>cu</strong> o variaţie constantă, atunci y ± <strong>de</strong>lta conţine cel<br />
puţin 50 % din anticipări.<br />
Pentru evaluarea polinomului ( ) 2 1<br />
utilizează secvenţa,<br />
p = [3 2 1]; v=polyval(p,[5 7 9]),<br />
rezultând,<br />
v = [ 86 162 262].<br />
p x = 3x<br />
2 + x + , în punctele x = 5, 7, 9 se<br />
Evaluarea unei matrice polinomiale se face <strong>cu</strong> funcţia polyvalm, care se<br />
apelează:<br />
• Y = polyvalm (p, X) <strong>cal<strong>cu</strong>le</strong>ază un polinom în sensul unei matrice, fiind<br />
acelaşi lucru <strong>cu</strong> a substitui matricea X, în polinomul p.<br />
Matricele Pascal sunt formate din triunghiul Pascal al coeficienţilor<br />
binomiali. Mai jos, este prezentată o matrice Pascal <strong>de</strong> ordinul 4,<br />
X = pascal(4) ; X = [ 1 1 1 1 ; 1 2 3 4 ; 1 3 6 10 ; 1 4 10 20 ],<br />
la care polinomul său caracteristic poate fi produs <strong>cu</strong> funcţia poly,<br />
p = poly(X) ; p = [ 1 -29 72 -29 1 ],<br />
4 3 2<br />
care reprezintă polinomul x − 29x<br />
+ 72x<br />
− 29x<br />
+ 1<br />
De menţionat că matricea Pascal are o proprietate specială şi anume, aceea că<br />
vectorul coeficienţilor unui polinom caracteristic este “palindromic”, adică este la<br />
fel şi înainte şi înapoi.<br />
Cal<strong>cu</strong>larea acestui polinom, matricea Pascal, element <strong>cu</strong> element, nu este<br />
foarte important, dar cal<strong>cu</strong>lul în sensul unei matrice este important, conducând la o<br />
matrice <strong>cu</strong> toate elementele zero şi aceasta este verificarea teoremei Cayley-<br />
Hamilton, ce spune că o matrice satisface propria sa e<strong>cu</strong>aţie caracteristică.
Cal<strong>cu</strong>le <strong>numerice</strong> <strong>cu</strong> <strong>polinoame</strong> 247<br />
<strong>11.</strong>4. Cal<strong>cu</strong>lul rădăcinilor sau al coeficienţilor<br />
polinomului când se <strong>cu</strong>nosc rădăcinile<br />
Prin <strong>de</strong>finiţie, un număr α ∈C<br />
se numeşte rădăcină a polinomului P(x),<br />
dacă şi numai dacă P ( α ) = 0 . Numărul α se numeşte rădăcină multiplă <strong>de</strong> ordinul<br />
P , dacă şi numai dacă ( − ) p<br />
p 1<br />
divi<strong>de</strong> pe P, iar ( )<br />
p a polinomului ( x)<br />
≠ 0<br />
x α<br />
x −α<br />
nu-l divi<strong>de</strong> pe P. Dacă p=1, rădăcina se numşte simplă, iar dacă p=2 ea se numeşte<br />
rădăcină dublă.<br />
Pentru un polinom oarecare, P(x), cal<strong>cu</strong>lul rădăcinilor este echivalent <strong>cu</strong><br />
rezolvarea e<strong>cu</strong>aţiei P(x)=0. Dacă polinomul P(x) este <strong>de</strong> gradul n, atunci va avea n<br />
rădăcini, care pot fi reale sau complexe.<br />
Atunci când coeficienţii polinomului sunt numere reale, rădăcinile complexe<br />
sunt perechi <strong>de</strong> numere complexe conjugate. Orice polinom <strong>de</strong> grad impar are cel<br />
puţin o rădăcină reală. Numărul rădăcinilor reale simple este egal <strong>cu</strong> numărul <strong>de</strong><br />
variaţii <strong>de</strong> semn ale şirului lui Rolle, al polinomului P. Şirul lui Rolle se<br />
construieşte punând în ordine crescătoare <strong>de</strong> la − ∞ la + ∞ , rădăcinile <strong>de</strong>rivatei<br />
'<br />
polinomului, P , inclusiv punctele <strong>de</strong> la infinit.<br />
Determinarea rădăcinilor polinomului se face, în Matlab, <strong>cu</strong> funcţia roots,<br />
care se apelează <strong>cu</strong> sintaxa,<br />
r = roots(c)<br />
în care c, este vectorul coeficienţilor polinomului, iar r, vectorul conţinând<br />
rădăcinile polinomului. Vectorul coeficienţilor polinomului, c, conţine coeficienţii<br />
unui polinom, ordonaţi în ordine <strong>de</strong>screscatoare a puterilor. Dacă c are n+1<br />
n<br />
componente, polinomul pe care îl reprezintă este <strong>de</strong> forma: c<br />
1<br />
s + ... + cns<br />
+ cn+<br />
1<br />
.<br />
De exemplu, polinomul:<br />
3 2<br />
s − 6⋅<br />
s − 72 ⋅ s − 27<br />
este reprezentat în MATLAB prin vectorul,<br />
c = [1 -6 -72 -27]<br />
Rădăcinile acestui polinom sunt restituite într-un vector coloană, astfel:<br />
r = roots(p)<br />
r = 12.1229<br />
-5.7345<br />
-0.3884.<br />
Dacă se <strong>cu</strong>nosc rădăcinile unui polinom, atunci <strong>de</strong>terminarea coeficienţilor<br />
se face <strong>cu</strong> funcţia Matlab poly, care se apelează <strong>cu</strong> sintaxa c = poly(r), r fiind<br />
vectorul, rădăcini ale polinomului, iar c fiind vectorul, coeficienţii polinomului.<br />
Apelată <strong>cu</strong> sintaxa,<br />
p = poly (A)<br />
+
248<br />
SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />
un<strong>de</strong> A este o matrice <strong>de</strong> n x n, ce restituie un vector rând ale cărui n+1 elemente<br />
sunt coeficienţii polinomului caracteristic, <strong>de</strong>t ( s ⋅ I − A)<br />
. Coeficienţii sunt ordonaţi<br />
în ordinea <strong>de</strong>screscătoare a puterilor; dacă un vector c, are n+1 componente,<br />
n<br />
polinomul pe care îl reprezintă este c<br />
1<br />
s + ... + cns<br />
+ cn+<br />
1<br />
.<br />
Matlab afişează <strong>polinoame</strong>le ca vectori rând, conţinând coeficienţii ordonaţi<br />
<strong>de</strong>screscător, în funcţie <strong>de</strong> puteri. E<strong>cu</strong>aţia caracteristică a matricei:<br />
A = [ 1 2 3 ; 4 5 6 ; 7 8 0 ],<br />
este restituită într-un vector rând <strong>de</strong> funcţia p = poly(A), rezultând,<br />
p = [ 1 -6 -72 -27 ]<br />
Rădăcinile acestui polinom sunt restituite într-un vector coloană <strong>de</strong> funcţia<br />
roots,<br />
r = roots(p),<br />
rezultând r = [ 12.1229 ; -5.7345 ; -0.3884 ].<br />
Funcţiile roots şi poly sunt funcţii reciproce, care realizează trecerea <strong>de</strong> la<br />
coeficienţii polinomului, la rădăcini sau <strong>de</strong> la rădăcini la coeficienţii polinomului.<br />
Pentru ca cele două funcţii să fie reciproce, este necesar ca valoarea coeficientului<br />
celui mai mari puteri să fie 1.<br />
Pentru a exemplifica aceasta se consi<strong>de</strong>ră polinomul,<br />
4 3 2<br />
P ( x)<br />
= x + 2 ⋅ x − 4⋅<br />
x + 3⋅<br />
x + 5 .<br />
Rădăcinile polinomului sunt aflate <strong>cu</strong> secvenţa <strong>de</strong> instrucţiuni,<br />
C = [ 1 2 -4 3 5]; r = roots(C),<br />
rezultând r = [ -3.3345 ; 1.0410 + 0.9605i ; 1.0410 - 0.9605i ; -0.7474].<br />
Revenirea la coeficienţii polinomului se face prin, C1=poly(r), obţinându-se:<br />
C1 = [1.0000 2.0000 -4.0000 3.0000 5.0000 ] i<strong>de</strong>ntic <strong>cu</strong> C.<br />
Evaluând polinomul P(x), <strong>de</strong>finit <strong>de</strong> vectorul C, al coeficienţilor, în punctele<br />
<strong>de</strong>finite <strong>de</strong> rădăcinile r, <strong>cu</strong> secvenţa V=polyval(C,r) se obţine V= [ 0 0 0 0 ], ceea<br />
ce confirmă faptul că r, sunt rădacinile polinomului.<br />
<strong>11.</strong>5. Reziduuri<br />
Dacă z=a este un pol sau un punct singular izolat al funcţiei f(z), într-o<br />
coroană cir<strong>cu</strong>lară ε < z − a < R , <strong>cu</strong> ε > 0 arbitrar <strong>de</strong> mic, funcţia f(z) este<br />
olomorfă, <strong>cu</strong> atât mai mult dacă f(z) este <strong>de</strong> forma unui polinom. Fie Γ , un cerc <strong>cu</strong><br />
centrul în a şi <strong>de</strong> rază ρ , conţinut în această coroană cir<strong>cu</strong>lară, ε < ρ < R .<br />
1<br />
Prin <strong>de</strong>finiţie, valoarea integralei ∫ Γ<br />
f ( z)<br />
d z înmulţită <strong>cu</strong> se numeşte<br />
2π ⋅i<br />
reziduul funcţiei f(z), relativ la polul sau punctul singular esenţial izolat z=a, şi se<br />
1<br />
notează rez f ( a)<br />
, adică rez f ( a)<br />
= ∫ Γ<br />
f ( z)<br />
dz<br />
. În loc <strong>de</strong> reziduul relativ la<br />
2π<br />
⋅ i
Cal<strong>cu</strong>le <strong>numerice</strong> <strong>cu</strong> <strong>polinoame</strong> 249<br />
punctul a, se mai spune uneori reziduul în punctul a.<br />
Reziduul unei funcţii f(z), relativ la punctul a, se poate obţine întot<strong>de</strong>auna din<br />
<strong>de</strong>zvoltarea în serie Laurent în jurul punctului a, fie că acesta este un pol al<br />
funcţiei, fie că este un punct singular esenţial izolat. Seria Laurent a funcţiei f(z)<br />
este,<br />
+∞<br />
k 1 f<br />
( )<br />
( ς )<br />
f ( z)<br />
= ∑ck<br />
⋅ z − a , <strong>cu</strong> ck<br />
= ∫ dζ<br />
, k = 0, ± 1, ± 2, L.<br />
Γ k+<br />
1<br />
k=−∞<br />
2π<br />
⋅i<br />
ζ − a<br />
( )<br />
Dacă k=-1, rezultă rez f ( a)<br />
= c−1<br />
, un<strong>de</strong> c -1 este coeficientul lui<br />
1<br />
z − a<br />
<strong>de</strong>zvoltarea în serie Laurent a funcţiei f(z) în jurul punctului a.<br />
Cal<strong>cu</strong>lul reziduului relativ la un pol se poate face şi pe alte căi.<br />
Dacă a este un pol al funcţiei f(z) şi p este ordinul său <strong>de</strong> multiciplitate,<br />
conform <strong>de</strong>finiţiei polului, funcţia ( z) = ( z − a) p ⋅ f ( z)<br />
şi ϕ ( z) ≠ 0 , iar reziduul <strong>de</strong>vine:<br />
⎧ 1 ϕ( z)<br />
1 p−1<br />
1<br />
( )<br />
( ) ( ) ( ) ( ) p<br />
( )<br />
⎪ ∫ dz<br />
= ϕ a = z - a f z<br />
p<br />
2π<br />
⋅i<br />
− p −1 ! p −1 !<br />
rez f ( a)<br />
=<br />
z a<br />
⎨<br />
⎪<br />
1 ϕ( z)<br />
p<br />
∫ dz<br />
= ϕ( a) = [( z - a) f ( z)<br />
]<br />
Γ z=<br />
a<br />
,<br />
⎪2π<br />
⋅i<br />
( z − a)<br />
din<br />
ϕ are în z=a un punct ordinar<br />
[ ]<br />
Γ z=<br />
a<br />
p-1<br />
, p > 1<br />
.<br />
p = 1<br />
⎩<br />
După <strong>cu</strong>m rezultă din relaţia <strong>de</strong> mai sus, <strong>pentru</strong> cal<strong>cu</strong>lul reziduului este<br />
necesară simplificarea <strong>cu</strong> z-a, care uneori poate fi dificilă.<br />
De aceea, se preferă ca f(z) să se scrie ca un cât <strong>de</strong> două funcţii, g(z) şi h(z),<br />
g(<br />
z)<br />
olomorfe într-o vecinatate a punctului a, respectiv f ( z)<br />
= .<br />
h(<br />
z)<br />
Funcţia Matlab, residue, transformă câtul <strong>polinoame</strong>lor într-o reprezentare a<br />
reziduurilor polilor şi înapoi. Aceasta se poate apela <strong>cu</strong> una dintre sintaxele:<br />
• [r,p,k] = residue(b,a) găseşte reziduurile, polii şi termenii direcţi ai unei<br />
<strong>de</strong>zvoltări parţiale, a unei fracţii, a unui raport între cele 2 <strong>polinoame</strong>, b(z)<br />
şi a(z), <strong>de</strong> forma<br />
b<br />
a<br />
m m−1<br />
m−2<br />
( z)<br />
b1<br />
z + b2<br />
z + b3z<br />
+ L+<br />
bm+<br />
1<br />
=<br />
n n−1<br />
n−2<br />
( z) a1z<br />
+ a2<br />
z + a3z<br />
+ L+<br />
an+<br />
1<br />
, un<strong>de</strong> b j şi a j<br />
sunt elementele <strong>de</strong> ordinul j ale vectorilor <strong>de</strong> intrare b şi a, iar r este<br />
vectorul coloană al reziduurilor, p este vectorul coloană al polilor şi k este<br />
vectorul linie al termenilor liberi;<br />
• [b,a] = residue(r,p,k) returnează coeficienţii <strong>polinoame</strong>lor b şi a,<br />
numărător şi numitor, al căror raport are rezidurile r, polii p, şi termenii<br />
liberi k.<br />
Dacă nu există poli multipli, atunci:
250<br />
SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />
( z)<br />
( z)<br />
b r1 r2<br />
rn<br />
= + + ... + + k( z)<br />
,<br />
a z − p1<br />
z − p2<br />
z − pn<br />
şi numărul <strong>de</strong> poli n este n = length(a)-1 = length(r) = length(p).<br />
Coeficientul termenului liber este nul dacă length(b) < length(a), iar în caz<br />
contrar, acesta are dimensiunea: length(k) = length(b)-length(a)+1.<br />
Dacă p(j) = …= p (j+m-1) este un pol <strong>cu</strong> gradul <strong>de</strong> multiplicitate m, atunci<br />
<strong>de</strong>zvoltarea va inclu<strong>de</strong> şi termenii <strong>de</strong> forma<br />
r<br />
j<br />
z − p<br />
j<br />
+<br />
r<br />
j+ 1<br />
j+<br />
m−1<br />
2<br />
( z − p ) ( z − p ) m<br />
j<br />
r<br />
+ ... + .<br />
Pentru cal<strong>cu</strong>lul efectiv, se obţin mai întâi polii <strong>cu</strong> ajutorul funcţiei roots.<br />
Apoi, dacă fracţia nu este corespunzătoare, este găsit termenul direct k, folosind<br />
funcţia <strong>de</strong>conv, care realizează o divizare polinomială. În cele din urmă,<br />
reziduurile sunt <strong>de</strong>terminate cal<strong>cu</strong>lând polinomul <strong>cu</strong> rădăcinile individuale găsite.<br />
Pentru rădăcini care se repetă, funcţia residue apelează funcţia internă resi2, care<br />
<strong>cal<strong>cu</strong>le</strong>ază reziduurile în lo<strong>cu</strong>rile în care acestea se găsesc.<br />
Din punctul <strong>de</strong> ve<strong>de</strong>re al cal<strong>cu</strong>lului numeric, <strong>de</strong>zvoltarea parţială a unei<br />
fracţii a unui polinom reprezintă o problemă pusă greşit. Dacă polinomul <strong>de</strong> la<br />
numitor a(z), este în apropiere <strong>de</strong> un polinom <strong>cu</strong> mai multe rădăcini, atunci<br />
schimbări minore, inclusiv erori întâmplătoare, pot să provoace schimbări majore<br />
în polii şi reziduurile cal<strong>cu</strong>late.<br />
Pentru exemplificarea modului <strong>de</strong> lucru a funcţiei residue, se consi<strong>de</strong>ră<br />
fracţia a două <strong>polinoame</strong>, exprimată astfel:<br />
3 2<br />
b( z)<br />
5z<br />
+ 3z<br />
− 2z<br />
+ 7<br />
=<br />
.<br />
3<br />
a( z) − 4z<br />
+ 8z<br />
+ 3<br />
Prin urmare, b=[ 5 3 -2 7], a=[-4 0 8 3] şi atunci [r,p,k]=residue(b,a), conduce<br />
la: r = [ -1.4167 ; -0.6653 ; 1.3320], p = [ 1.5737; -1.1644; -0.4093], k = -1.25.<br />
Aplicând transformarea inversă, [b,a] = residue(r,p,k), se obţine,<br />
b = [ -1.25 -0.75 0.50 -1.75], a = [ 1.00 -0.00 -2.00 -0.75 ],<br />
3<br />
2<br />
b(<br />
z)<br />
−1.25⋅<br />
z − 0.75⋅<br />
z + 0.50 ⋅ z −1.75<br />
iar rezultatul poate fi exprimat ca: =<br />
.<br />
3<br />
a(<br />
z)<br />
z − 2.00⋅<br />
z − 0.75<br />
<strong>11.</strong>5.1. Utilitare <strong>pentru</strong> funcţii <strong>de</strong> transfer<br />
Mo<strong>de</strong>lul <strong>de</strong> stare liniar, sub formă vectorială, a unui sistem dinamic este:<br />
⎧ x& ( t)<br />
= A⋅<br />
x + B ⋅u(<br />
t)<br />
⎨<br />
⎩y(<br />
t)<br />
= C ⋅ x + D ⋅u(<br />
t)<br />
un<strong>de</strong>: A – matricea <strong>de</strong> stare; B – matricea stare intrare; C – matricea stare ieşire; u –<br />
perturbaţia; t – timpul.<br />
Transformarea parametrilor unui sistem dinamic în funcţie <strong>de</strong> transfer se<br />
realizează <strong>cu</strong> ss2tf, care se apelează <strong>cu</strong> sintaxa:<br />
j
Cal<strong>cu</strong>le <strong>numerice</strong> <strong>cu</strong> <strong>polinoame</strong> 251<br />
[N,D] = ss2tf(A,B,C,D,iu),<br />
un<strong>de</strong> vectorul N, conţine coeficienţii numărătorului, iar vectorul D, coeficienţii<br />
numitorului, în ordinea <strong>de</strong>screscătoare a puterilor.<br />
Funcţia ss2tf transformă sistemul dinamic,<br />
⎧ x& = A⋅<br />
x + B ⋅u<br />
⎨<br />
⎩y<br />
= C ⋅ x + D ⋅u<br />
în funcţia <strong>de</strong> transfer H,<br />
N(<br />
s)<br />
−1<br />
<strong>de</strong>t( s ⋅ I − A + B ⋅C) − <strong>de</strong>t( s ⋅ I − A)<br />
H ( s)<br />
= = C(<br />
s ⋅ I − A)<br />
⋅ B + D =<br />
.<br />
D(<br />
s)<br />
<strong>de</strong>t s ⋅ I − A<br />
( )<br />
Funţia tf2ss realizează transformarea inversă şi se apelează <strong>cu</strong> sintaxa:<br />
[A,B,C,D] = tf2ss(N,D).<br />
Transformarea unui sistem într-o funcţie <strong>de</strong> transfer <strong>de</strong> tip „z”, zero-poli,<br />
z(<br />
s)<br />
( s − z1<br />
)( s − z2<br />
) L( s − zn<br />
)<br />
H ( s)<br />
= = k<br />
p(<br />
s)<br />
( s − p1<br />
)( s − p2<br />
) L( s − pn<br />
)<br />
se face <strong>cu</strong> funcţia ss2zp, care se apelează,<br />
[z,p,k] = ss2zp(A,B,C,D,u).<br />
Funţia zp2ss realizează transformarea inversă şi se apelează <strong>cu</strong> sintaxa:<br />
[A,B,C,D] = zp2ss(z,p,k)<br />
Transformarea funcţiei parametrilor în poli-zerouri, respectiv din forma,<br />
n−1<br />
b(<br />
s)<br />
b1<br />
⋅ s + L+<br />
bn<br />
−−1<br />
⋅ s + bn<br />
H ( s)<br />
= =<br />
m−1<br />
a(<br />
s)<br />
a1<br />
⋅ s + L+<br />
am−−1<br />
⋅ s + am<br />
în forma,<br />
z(<br />
s)<br />
( s − z1<br />
)( s − z2<br />
) L( s − zn<br />
)<br />
H ( s)<br />
= = k<br />
p(<br />
s)<br />
s − p s − p L s − p<br />
( )( ) ( )<br />
se realizează <strong>cu</strong> funcţia tf2zp, care se apelează <strong>cu</strong> sintaxa:<br />
[z,p,k] = tf2zp(b,a)<br />
1<br />
2<br />
Transformarea inversă este realizată <strong>de</strong> funcţia zp2tf, care se apelează <strong>cu</strong><br />
sintaxa:<br />
[b,a] = zp2tf(z,p,k).<br />
<strong>11.</strong>6. Derivata unui polinom<br />
Polinomul, fiind cea mai comună funcţie, este <strong>de</strong>rivabil într-un punct x 0 , dacă<br />
limita,<br />
f ( x)<br />
− f x0 '<br />
lim<br />
( ) = f ( x)<br />
,<br />
x→x0<br />
x − x<br />
0<br />
n
252<br />
SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />
există în R şi este finită.<br />
Funcţia Matlab, poly<strong>de</strong>r, returnează <strong>de</strong>rivatele unui polinom şi se poate<br />
apela <strong>cu</strong> una dintre sintaxe:<br />
• D = poly<strong>de</strong>r (C), un<strong>de</strong> C este vectorul linie al coeficienţilor polinomului,<br />
în ordinea <strong>de</strong>screscătoare a puterilor variabilei, iar D este vectorul linie al<br />
coeficienţilor polinomului <strong>de</strong>rivat;<br />
• D = poly<strong>de</strong>r (A, B), returnează în vectorul D(x), <strong>de</strong>rivatele produsului<br />
'<br />
A( x)<br />
⋅ B(<br />
x)<br />
, astfel ca D ( x)<br />
= ( A(<br />
x)<br />
⋅ B(<br />
x)<br />
) = A′<br />
( x)<br />
⋅ B(<br />
x)<br />
+ A(<br />
x)<br />
⋅ B′<br />
( x)<br />
;<br />
• [M, N] = poly<strong>de</strong>r (A, B), returnează în vectorii M şi N, coeficienţii<br />
A(<br />
x)<br />
numărătorului şi numitorului <strong>de</strong>rivatei raportului <strong>polinoame</strong>lor ,<br />
B(<br />
x)<br />
'<br />
'<br />
M ( x)<br />
⎛ A(<br />
x)<br />
⎞ A ( x)<br />
⋅ B(<br />
x)<br />
− A(<br />
x)<br />
⋅ B ( x)<br />
respectiv, =<br />
2<br />
N(<br />
x)<br />
⎜ =<br />
B(<br />
x)<br />
⎟<br />
.<br />
⎝ ⎠ ( B(<br />
x))<br />
Pentru cal<strong>cu</strong>lul <strong>de</strong>rivatei polinomului P(x)=x 3 +2x 2 +3x+4, secvenţa Matlab<br />
este:<br />
P=[1 2 3 4] ; D=poly<strong>de</strong>r(P),<br />
obţinându-se D=[3 4 3], respectiv polinomul P ’ (x)=3x 2 +4x+3.<br />
2<br />
2<br />
Derivata produsului ( 3⋅ x + 6 ⋅ x + 9) ⋅ ( x + 2 ⋅ x)<br />
este obţinută <strong>cu</strong> secvenţa:<br />
a = [3 6 9]; b = [1 2 0]; k = poly<strong>de</strong>r(a,b),<br />
3 2<br />
rezultând k = [ 12 36 42 18 ], care reprezintă polinomul12x + 36x<br />
+ 42x<br />
+ 18 .<br />
Integrarea polinomului din punct <strong>de</strong> ve<strong>de</strong>re analitic se face <strong>cu</strong> funcţia<br />
polyint, care se poate apela:.<br />
• polyint(p,k) restituie un polinom reprezentând integrala polinomului p,<br />
folosind o constantă scalară <strong>de</strong> integrare, k;<br />
• polyint (p), presupune constanta <strong>de</strong> integrare k = 0.