Sunteți pe pagina 1din 11

Informatica aplicată 2 - MATLAB 1

CURS 12

CALCULE NUMERICE CU POLINOAME

Funcțiile MATLAB pentru evaluarea polinoamelor, calculul derivatelor și integralelor polinoamelor,


generarea polinoamelor când se cunosc rădăcinile etc., sunt următoarele:
conv Calculează produsul a două polinoame
deconv Calculează câtul și restul împărțirii a două polinoame
poly Calculează coeficienții unui polinom cu rădăcinile date
polyder Calculează derivata polinoamelor
polyfit Aproximează un set de date cu un polinom de grad n
polyint Calculează analitic integralele polinoamelor
polyval Evaluează un polinom la valorile precizate ale variabilei
roots Calculează rădăcinile unui polinom

Polinomul este o funcție de o singură variabilă, care poate fi exprimat sub următoarea formă
generală:

p ( x ) = a1x +a2x
n n-1 2
+...+an-1x +anx +an+1

unde: x este variabila


a1, a2, ... , an+1 sunt coeficienții polinomului
Gradul polinomului este egal cu cea mai mare valoare a exponenților.
În sintaxa MATLAB, polinoamele sunt reprezentate cu un vector linie care conține coeficienții în
ordinea descrescătoare a puterilor variabilei. Coeficienții polinomului au indicii de la 1 la n+1
De exemplu, reprezentarea în MATLAB a polinomului:

p ( x ) = x +2x +0,5x -6,5


4 2

este dată de vectorul:


p=[1 0 2 0.5 -6.5]

1. Evaluarea polinoamelor
În MATLAB există mai multe metode pentru evaluarea polinoamelor. Vor fi exemplificate, cu
polinomul:

p ( x ) = x +2x +0.5x -6.5


4 2

a) Evaluarea cu scalari, adică pentru o singură valoare a variabilei. În acest caz se efectuează
operațiile cu scalari
Informatica aplicată 2 - MATLAB 2

Exemplu: Evaluarea polinomului p pentru x=1


x=1;
p=x^4+2*x^2+0.5*x-6.5
p =
-3

b) Evaluarea polinomului în mai multe puncte. În acest caz se efectuează operații cu tablouri
(matrice sau vectori). Programul se execută mai rapid decât ansamblul calculelor pentru
fiecare valoare scalară în parte. Sintaxa evaluării presupune în acest caz plasarea unui punct
înaintea operatorilor înmulțire, împărțire sau ridicare la putere. Dimensiunea matricei în care
se returnează valorile polinomului este identică cu cea a matricei care conține punctele în care
se face evaluarea
Exemplu: Evaluarea polinomului p pentru x=-2, 0, 0.5, 1, 3
x=[-2 0 0.5 1 3];
p=x.^4+2*x.^2+0.5*x-6.5
p =
16.5000 -6.5000 -5.6875 -3.0000 94.0000

c) Evaluarea polinomului în unul sau mai multe puncte utilizând funcția polyval
Se apelează cu sintaxa:
Y=polyval(p,X)

Funcția polyval evaluează polinomul definit de vectorul p al coeficienților polinomului, în


punctul X. Dacă X este vector sau matrice, polinomul este evaluat pentru fiecare dintre
elementele acestuia.
Exemplu: Evaluarea polinomului p pentru X=[-2 0; 0.5 1]
p=[1 0 2 0.5 -6.5]; X=[-2 0; 0.5 1];
Y=polyval(p,X)
Y =
16.5000 -6.5000
-5.6875 -3.0000

2. Adunarea și scăderea polinoamelor


Fie două polinoame p1(x) și p2(x) ai căror coeficienți sunt înregistrați în vectorii linie g și h.
Operațiile aritmetice de adunare și scădere a polinoamelor presupun adunarea și scăderea
coeficienților de același ordin. Deoarece în MATLAB aceste operații necesită vectori de aceeași
dimensiune, lungimea vectorilor coeficienților este dată de polinomul cu puterea cea mai mare.
Odată stabilită această dimensiune, spre exemplu m, vectorii coeficienților polinoamelor care au
puterea maximă n mai mică decât m vor fi completați la stânga cu coeficienți zero până la m
Informatica aplicată 2 - MATLAB 3

p1( x ) = x +2x +0,5x -6,5 ; p2( x ) = 3x -2x +5 .


4 2 2
Exemplu: Se consideră polinoamele: Se cer
polinoamele: g = p1( x ) + p2( x ) ; h = p1( x ) - p2( x )
p1=[1 0 2 0.5 -6.5];
p2=[0 0 3 -2 5];
g=p1+p2
g =
1.0000 0 5.0000 -1.5000 -1.5000

h=p1-p2
h =
1.0000 0 -1.0000 2.5000 -11.5000

3. Înmulțirea și împărțirea polinoamelor


Multiplicarea unui polinom cu un scalar constă în multiplicarea coeficienților acestuia cu acel scalar.
Înmulțirea a două polinoame este echivalentă unei operații de convoluție; este realizată cu
funcția conv, care se apelează cu sintaxa:
d=conv(a,b)

unde: a și b sunt vectorii coeficienților polinoamelor care se înmulțesc


d este vectorul coeficienților polinomului produs d(x) = a(x) ∙ b(x)
Împărțirea a două polinoame este echivalentă unei operații de deconvoluție; este realizată cu
funcția deconv, care se apelează cu sintaxa:
[c,r]=deconv(a,b)

unde: a și b sunt vectorii coeficienților polinoamelor deîmpărțit și împărțitor


c este vectorul coeficienților polinomului cât, r este vectorul coeficienților polinomului rest,
rezultat al operației r(x) = a(x) - c(x) ∙ b(x)

p1( x ) = x +2x +0,5x -6,5 ; p2( x ) = 3x -2x +5 .


4 2 2
Exemplu: Se consideră polinoamele: Se cer
polinoamele: u ( x ) = p1( x )  p2( x ) ; v ( x ) = p1( x ) / p2( x ) și restul r(x)
p1=[1 0 2 0.5 -6.5];
p2=[3 -2 5];
u=conv(p1,p2)
u =
3.0000 -2.0000 11.0000 -2.5000 -10.5000 15.5000 -32.5000

[v,r]=deconv(p1,p2)
v =
0.3333 0.2222 0.2593
Informatica aplicată 2 - MATLAB 4

r =
0 0 0 -0.0926 -7.7963

4. Calculul derivatei polinoamelor


Problemele de derivare ale polinoamelor sunt rezolvate cu funcția polyder
1. Cu sintaxa care presupune un singur argument de intrare și unul de ieșire:
d=polyder(p)

funcția polyder returnează în vectorul d coeficienții derivatei polinomului p:


d(x)= p ( x )

2. Cu sintaxa care presupune două argumente de intrare și unul de ieșire:


d=polyder(a,b)

funcția polyder returnează în vectorul d coeficienții derivatei polinomului produs a∙b:

d(x)= ( a ( x )  b ( x ) ) = a ( x )  b ( x ) + a ( x )  b ( x )

3. Cu sintaxa care presupune două argumente de intrare și două de ieșire


[m,n]=polyder(a,b)

funcția polyder returnează în vectorii m și n coeficienții numărătorului și numitorului derivatei


raportului polinoamelor a/b:

m (x)  a ( x )  a ( x )  b ( x ) -a ( x )  b ( x )
=  =
n (x)  b(x)  b(x)
2

Exemplu: Se consideră polinoamele: p1( x ) = x4 +2x2 +0,5x -6,5 ; p2( x ) = 3x2 -2x +5 . Să se calculeze
coeficienții derivatelor polinoamelor p1 și p2, ai produsului p1∙p2, respectiv ai numărătorului și
numitorului raportului p1/p2
p1=[1 0 2 0.5 -6.5]; p2=[3 -2 5];
d1=polyder(p1)
d1 =
4.0000 0 4.0000 0.5000

d2=polyder(p2)
d2 =
6 -2

d3=polyder(p1,p2)
d3 =
18.0000 -10.0000 44.0000 -7.5000 -21.0000 15.5000
Informatica aplicată 2 - MATLAB 5

[m,n]=polyder(p1,p2)
m =
6.0000 -6.0000 20.0000 -5.5000 59.0000 -10.5000
n =
9 -12 34 -20 25

5. Calculul analitic al integralelor polinomiale


Integrala unui polinom utilizează funcția polyint
Se apelează cu una din sintaxele:
in=polyint(p)
in=polyint(p,k)

unde: p este vectorul linie al coeficienților polinomului în ordinea descrescătoare a puterilor


variabilei;
k este constanta de integrare (fără k constanta de integrare este 0)

Exemplu: Să se calculeze integrala polinoamelor p1( x ) = x4 +2x2 +0,5x -6,5 ; p2( x ) = 3x2 -2x +5
p1=[1 0 2 0.5 -6.5]; p2=[3 -2 5];
in1=polyint(p1)
in1 =
0.2000 0 0.6667 0.2500 -6.5000 0

in2=polyint(p2,2)
in2 =
1 -1 5 2

6. Calculul rădăcinilor polinoamelor


Dacă funcția f(x) este un polinom de gradul n atunci f(x)=0 are n rădăcini, care pot fi reale sau
complexe. În cazul în care coeficienții polinomului sunt numere reale, rădăcinile complexe sunt în
perechi complex conjugate.
Funcția roots determină rădăcinile polinoamelor.
Se apelează cu sintaxa:
r=roots(c)

unde: c este un vector linie, care conține coeficienții polinomului


r este un vector coloană care conține rădăcinile polinomului
Informatica aplicată 2 - MATLAB 6

Exemplu: Să se găsească rădăcinile polinoamelor: p1( x ) = x4 +2x2 +0,5x -6,5 ; p2( x ) = 3x2 -2x +5
p1=[1 0 2 0.5 -6.5];p2=[3 -2 5];
r1=roots(p1)
r1 =
0.0456 + 1.9345i
0.0456 - 1.9345i
-1.3640
1.2727

r2=roots(p2)
r2 =
0.3333 + 1.2472i
0.3333 - 1.2472i

7. Calculul coeficienților unui polinom cu rădăcinile date


Funcția poly determină coeficienții unui polinom ale cărui rădăcini sunt cunoscute.
Se apelează cu sintaxa:
c=poly(r)

unde: r este un vector linie care conține rădăcinile polinomului


c este un vector linie care conține coeficienții polinomului
Exemplu: să se determine polinomul care are rădăcinile -2 și 2
r=[-2 2]
p=poly(r);
p =
1 0 -4

Funcțiile roots și poly sunt funcții reciproce, realizând trecerea de la coeficienți la rădăcini,
respectiv de la rădăcini la coeficienți.
Informatica aplicată 2 - MATLAB 7

INTERPOLAREA DATELOR

Interpolarea unui set discret de perechi de date experimentale (xk,yk) presupune determinarea
unei funcții f(x) astfel ca f(xk)=yk, în vederea estimării setului de date în orice alt punct xi≠xk.
Interpolarea răspunde la nevoia de a găsi o estimare a valorilor yi în punctele xi pentru care nu
s-a realizat experimentul.
Spre exemplu, fie punctele de coordonate (x1,y1) și (x2,y2) care au fost stabilite experimental;
se cere estimarea valorii f(xi)=yi, unde x1 < xi < x2 (valoarea xi nu a fost inclusă în
experiment, deci valoarea yi nu se cunoaște). Dacă punctele sunt unite printr-o dreaptă,
interpolarea se numește liniară, iar dacă sunt unite printr-un polinom, interpolarea este spline.
Extrapolarea reprezintă estimarea unei valori f(xe)=ye, unde xe se află în afara intervalului
valorilor din experiment (xmin, xmax)
Principalele funcții MATLAB pentru interpolarea datelor sunt:
interp1 Interpolează date din tabele unidimensionale
interp2 Interpolează date din tabele bidimensionale
interp3 Interpolează date din tabele tridimensionale
interpn Interpolează date din tabele N-dimensionale

1. Interpolarea datelor din tabele unidimensionale


Se presupune că există un set de date care reprezintă coordonatele (xk,yk). Obiectivul îl constituie
estimarea valorilor funcției f(x), pentru orice punct x  ( xk, xk + 1 ) printr-o curbă de
interpolare care trece prin toate punctele (xk,yk) care o definesc.
Se realizează cu funcția interp1, care se apelează cu una din sintaxele:
yi=interp1(x,y,xi,'metoda') unde x este vectorul care conține abscisele, respectiv y
este vectorul care conține ordonatele datelor cunoscute (cu pas "mare"); xi este un vector
care conține noile abscise, de regulă cu pas mai "fin"; yi este vectorul returnat, asociat lui
xi; interpolarea se face cu una din următoarele metode:

'nearest' Nearest neighbor interpolation [interpolare de tip cel mai apropiat


vecin]
'next' next neighbor interpolation [interpolare de tip vecinul următor]
'previous' previous neighbor interpolation [interpolare de tip vecinul anterior]
'linear' Linear interpolation (default) [interpolare liniară (implicită)]
'spline' Cubic spline interpolation [interpolare spline cubică]
'pchip' Shape-preserving piecewise cubic interpolation [interpolare cubică cu
păstrarea formei]
Informatica aplicată 2 - MATLAB 8

yi=interp1(x,y,xi,'metoda','extrap') interpolează și extrapolează indiferent de


metoda specificată
Atenție!!! Valorile elementelor vectorului x trebuie să fie ordonate crescător.
Exemplul 1: Cunoscând evoluția populației unui oraș între anii 1920 și 2010, din 10 în 10 ani, să se
estimeze prin toate metodele evoluția anuală a populației între anii 1900 și 2030. Să se estimeze
populația din anii 1917 și 2043 prin metoda 'pchip'
x=1920:10:2010;
y=[75995 91972 105711 123203 131669 150697 179323 203212 226505 249633];
xi=1900:2030;
y1i=interp1(x,y,xi,'nearest','extrap');
y2i=interp1(x,y,xi,'linear','extrap');
y3i=interp1(x,y,xi,'spline','extrap');
y4i=interp1(x,y,xi,'pchip','extrap');
plot(x,y,'o',xi,y1i,xi,y2i,xi,y3i,xi,y4i);grid;...
legend('date','nearest','linear','spline','pchip','Location','EastOutside')
y5i=interp1(x,y,[1917,2043],'pchip')
y5i =
1.0e+005 *
0.7078 3.2477

Exemplul 2: Să se reprezinte grafic o interpolare liniară și spline prin șase puncte date, pe o rețea de
10 ori mai "fină".
x=[0 1 2 3 4 5];y=[0.0 20.0 60.0 68.0 77.0 110.0];
xi=0:0.1:5;
yil=interp1(x,y,xi,'linear');
Informatica aplicată 2 - MATLAB 9

yis=interp1(x,y,xi,'spline')
plot(x,y,'o',xi,yil,xi,yis);grid;title('Interpolare liniara vs. spline')

2. Interpolarea datelor din tabele bidimensionale


Funcția interp2 interpolează datele funcțiilor de două variabile și se apelează cu sintaxa:
Zi=interp2(x,y,Z,xi,yi,'metoda') unde x este vector linie, y este vector coloană, cu
pași mai "mari", Z este matricea valorilor F(x,y), matricea Zi conține valorile interpolate
corespunzătoare vectorului linie xi și vectorului coloană yi, cu pași mai "fini"; nu permite
extrapolare, returnând NaN pentru aceste elemente; interpolează utilizând următoarele
metode:
'nearest' nearest neighbor interpolation [interpolare de tip cel mai apropiat
vecin]
'linear' bilinear interpolation (default) [interpolare biliniară (implicită)]
'spline' spline interpolation [interpolare spline cubică]
'cubic' bicubic interpolation [interpolare bicubică (datele trebuie să fie uniform
distanțate), în caz contrar se realizează tot interpolare 'spline']
Observație: Nu permit extrapolare, returnând NaN pentru aceste elemente!!!
Atenție!!! Valorile vectorilor x și y trebuie să fie ordonate crescător.
Exemplul 1: Să se interpoleze datele din tabelul bidimensional pentru valorile x=1:9, y=1:10. Să se
estimeze valoarea lui z pentru x=3.72 și y=5.68.
x
1 2 5 9
y
1 2 6 7 5
3 3 4 8 6
10 4 6 9 5
Informatica aplicată 2 - MATLAB 10

x=[1 2 5 9];
y=[1 3 10]';
Z=[2,6,7,5;3,4,8,6;4,6,9,5];
xi=1:9;
yi=[1:10]';
Zil=interp2(x,y,Z,xi,yi,'linear');
surf(x,y,Z);hold on;surf(xi,yi,Zil+25);

Zil=interp2(x,y,Z,3.72,5.68,'linear')
Zil =
6.8395
Zic=interp2(x,y,Z,3.72,5.68,'spline')
Zic =
5.7064

3. Interpolarea datelor din tabele tridimensionale


Funcția interp3 interpolează datele funcțiilor de trei variabile. Se apelează cu sintaxa:
Vi=interp3(x,y,z,V,xi,yi,zi,'metoda') interpolează utilizând următoarele metode:
'nearest' nearest neighbor interpolation [interpolare de tip cel mai apropiat
vecin]
'linear' linear interpolation (default) [interpolare liniară (implicită)];
'spline' spline interpolation [interpolare spline cubică];
'cubic' cubic interpolation [interpolare cubică (datele trebuie să fie uniform
distanțate), în caz contrar se realizează tot interpolare 'spline'].
Atenție!!! Valorile vectorilor x, y și z trebuie să fie ordonate crescător.
Informatica aplicată 2 - MATLAB 11

4. Interpolarea datelor din tabele N-dimensionale


Funcția interpn interpolează datele funcțiilor de N variabile. Se apelează cu sintaxa:
Vi=interpn(x1,x2,x3,...,V,x1i,x2i,x3i,...,'metoda') interpolează utilizând metodele:
'nearest' nearest neighbor interpolation [interpolare de tip cel mai apropiat
vecin];
'linear' linear interpolation (default) [interpolare liniară (implicită)];
'spline' spline interpolation [interpolare spline];
'cubic' bicubic interpolation [interpolare cubică (datele trebuie să fie uniform
distanțate), în caz contrar se realizează tot interpolare 'spline'].
Atenție!!! Valorile vectorilor x1, x2, x3, ... trebuie să fie ordonate crescător.

Bibliografie
1. ***, Fundamente de Matlab, telecom.etti.tuiasi.ro/
2. Iulian Lupea, Curs Matlab
3. Nicoleta Breaz ș.a., Modelarea matematică prin Matlab
4. ***, MATLAB User’s Guide, The Mathworks Inc., SUA

S-ar putea să vă placă și