21.07.2014 Views

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 ...

SHOW MORE
SHOW LESS

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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!