LUCRAREA 5
Polinoame.Funcii.Ecuaii
Polinoame n MATLAB
Notaia obinuit utilizat la polinoame este una simbolic.
MATLAB utilizeaz n calcule doar un vector ce are ca elemente
coeficienii monoamelor. Numrul acestor elemente este cu 1 mai mare
dect gradul polinomului Astfel pentru polinomul
5
5 4 x x + MATLAB
utilizeaz vectorul obinut cu comanda [1 0 0 0 -5 4]. Se observ faptul
c avem coeficient zero pentru monoamele care lipsesc (cele de grad 4, 3
i 2). Numrul elementelor vectorului este 6 adic 5+1(5 fiind gradul
polinomului). Se observ faptul c avem la stnga coeficientul
monomului de grad maxim. Dac rezult din diverse calcule (specifice
polinoamelor ) vectorul -2 0 -1 5 0 4 -2 acesta reprezint polinomul:
6 4 3
2 5 4 2 x x x x + + .
Manipularea polinoamelor n MATLAB se face prin intermediul
mai multor funcii aplicate asupra vectorilor coeficienilor, funcii pe care
le prezentm n continuare.
A. nmulirea a dou polinoame se face cu funcia conv:
w=conv(u,v)
unde u si v sunt vectorii coeficienilor polinoamelor care se nmulesc, iar
w este vectorul coeficienilor polinomului produs. Astfel dac p este
vectorul coeficienilor polinomului
7 6 5 4 3 2
4 6 4 6 x x x x x x x + + +
adic p=[1 1 -4 6 -1 -1 4 6], iar q vectorul coeficienilor polinomului
3 2
7 15 x x x + . adic q=[1 -1 -7 15] , atunci conv(p,q) va da ca
rezultat vectorul 1 0 -12 18 36 -102 102 -18 -37 102 -90 adic
polinomul produs:
10 8 7 6 5 4 3 2
18 36 102 102 18 37 102 90 x x x x x x x x x + + + + .
B. mprirea a dou polinoame se face cu funcia deconv:
[c,r]=deconv(p,q)
unde c este vectorul coeficienilor ctului, iar r este vectorul
coeficienilor restului. Astfel dac vrem s mprim polinomul p la q
(definite mai sus) trebuie scris comanda deconv astfel:
>> [c,r]=deconv(p,q)
c =
2
1 2 5 10 14
r =
0 0 0 0 0 8 -48 -216
Deci ctul este polinomul
4 3 2
2 5 10 14 x x x x + + + + iar restul este
polinomul
2
8 48 216 x x .
C. Determinarea rdcinilor unui polinom se face cu ajutorul
funciei roots. De exemplu putem determina rdcinile
polinoamelor p i q de mai sus:
>> roots(p)
ans =
-3.0000
-1.0000
1.0000 + 1.0000i
1.0000 - 1.0000i
-0.0000 + 1.0000i
-0.0000 - 1.0000i
1.0000
>> roots(q)
ans =
-3.0000
2.0000 + 1.0000i
2.0000 - 1.0000i
D. Determinarea unui polinom ale crui rdcini sunt elementele
unui vector v se face cu funcia w=poly(v). n w se vor afla
coeficienii polinomului cutat. De exemplu dac v=[1 1 -2]
atunci:
>> poly(v)
ans =
1 0 -3 2
Deci polinomul cutata este
3
3 2 x x + .
E. Determinarea valorii polinomului reprezentat de vectorul
coeficienilor v, ntr-un punct x
0
se face cu funcia
polyval(v,x
0
). De exemplu valoarea polinomului p n -2 este:
>> polyval(p,-2)
ans =
162
F. Derivata unui polinom p este polinomul ai crui coeficieni
sunt dai de funcia polyder(p), de exemplu:
polyder(p)
ans =
3
7 6 -20 24 -3 -2 4
Adic polinomul:
6 5 4 3 2
7 6 20 24 3 2 4 x x x x x x + + +
G. Dac se dorete determinarea unui polinom de un anumit grad
care s aproximeze un set de date experimentale n sensul
metodei celor mai mici ptrate se utilizeaz funcia
w=polyfit(x,y,n) unde w este vectorul coeficienilor
polinomului cutat, vectorii x i y sunt vectorii datelor
experimentale iar n este gradul polinomului cutat. De
exemplu dac x=0:pi/10:pi,iar y=sqrtx(x) atunci polinomul de
gradul 4 ce aproximeaz setul de date este dat de
>> polyfit(x,y,4)
ans =
-0.2969 1.4531 -2.5609 2.3776 0.0183
Adic polinomul:
4 3 2
0.2969 1.4531 2.5609 2.3776 0.0183 x x x x + + + .
H. pentru aflarea valorilor prin interpolare polinomial se
utilizeaz funcia interp1(x,y,x
0
, metoda) unde x,y sunt
vectorii datelor experimentale. X
0
este punctul n care vrem s
aflm valoarea, iar metoda este: nearest, linear, spline i cubic
ultimele dou lund mai mult timp de calcul dar fiind mai
precise astfel pentru datele x i y de la G, utiliznd cele 4
metode n punctul 1.1 obinem:
>> interp1(x,y,1,'nearest')
ans =
1
>> interp1(x,y,1.1,'nearest')
ans =
1.0954
>> interp1(x,y,1.1,'linear')
ans =
1.0477
>> interp1(x,y,1.1,'spline')
ans =
1.0489
>> interp1(x,y,1.1,'cubic')
ans =
1.0488
>> sqrt(1.1)
ans =
1.0488
4
Ultima valoare este valoarea exact i se observ faptul c
ultimele dou metode sunt mai precise.
Funcii utilizator
Pentru definirea funciilor utilizator cu expresii mai complexe,
sau mai des utilizate se recomand definirea cu function lucru cel
vom face ntr-o lucrare ulterioar. Pentru funcii mai simple sau
utilizate temporar se recomand definirea cu funcia inline.
Aceast funcie este specific pachetului MATLAB negsindu-se
n nici un alt limbaj de programare. Putem definii astfel funcia
utilizator
sin
( )
sin cos 4
x
g x
x x
=
+ +
astfel
>> g=inline('sin(x)./(sin(x)+cos(x)+4)')
g =
Inline function:
g(x) = sin(x)./(sin(x)+cos(x)+4)
A. Dac dorim s facem graficul unei funcii utilizator utiliz
funcia fplot(numef,limite,specl) unde limite este un vector cu
2 sau 4 valori indicnd limitele pentru x(2valor) i eventual
y(daca sunt 4 valori),iar specl este specificatorul de linie
acelai ca la comanda plot(vezi laboratorul 4). Exemplu
pentru g definit anterior
>> fplot(g,[-pi,pi],'r')
5
B. Pentru determinarea valorii minime a unei funcii pe un
interval utilizm funcia fminbnd(numef,xmin,xmax) unde
[xmin,xmax] indic intervalul n care cutm valoarea
minim. Pentru g de mai sus pe intervalul [-2,2]:
>> fminbnd(g,-2,2)
ans =
-1.8235
C. Pentru calculul integralei definite se utilizeaz funcia
quad(numef,a,b), unde a i b sunt limitele ntre care se integreaz.
Pentru g de mai sus:
>> quad(g,-pi/4,pi)
ans =
0.3589
Adic
4
sin
0.3589
sin cos 4
x
dx
x x
+ +
+ +
pentru xmin=0,xmax=3,ymin=0,ymax=2,zmin=0,zmax=1.
6
D. Pentru calculul zerourilor(rdcinilor) unei funcii putem
utiliza funcia fzero(numef, x
0
) aceast funcie calculeaz o
rdcin a funciei cea mai aproape de x
0
. De exemplu:
>> gx=inline('(x.^2-1).*sin(3*x)')
gx =
Inline function:
gx(x) = (x.^2-1).*sin(3*x)
>> fzero(gx,1.5)
ans =
1.0472
>> fzero(gx,0.9)
ans =
1.0000
APLICAII
1. Fie polinoamele:
5 3 2
[ ] 7 8 2 12 P x x x x x = + + ;
[ ]
4 2
5 4 Q x x x = + ;
[ ]
6 4 2
4 4 T x x x x = +
a) S se determine produsul P[x]*T[x]*Q[x] ;
b) S se determine ctul i restul mpririi P[x]:Q[x] i
T[x]:Q[x];
c) S se determine rdcinile polinoamelor P[x], Q[x] i T[x].
2.a) S se determine polinomul S[x] ale crui rdcini sunt:
x
1
=1, x
2
=-2, x
3
=3, x
4
=-4, x
5
=5
.
;
b) S se afle valorile S(2), S(0) i S(-7);
c) S se afle valorile S(1), S(0) i S(-1).
3. Fie 0: 10: x = i y=sin(x).
a) S se determine polinomul P
4
[x] de gradul 4 care aproximeaz
datele din vectorii x i y.
b) S se compare valorile [ ]
4
2 P cu valoarea exactsin( 2) );
c) S se calculeze utilnd toate tipurile de interpolare valoarea n
2 .
7
4. a) S se reprezinte graficele funciilor f(x)=x*sin(x) i
g=ln(1+sin(x)) pe [ ] , utiliznd funcia fplot.
b) S se determine minimumul funciei
4 2
6
5 4
( )
4
x x
f x
x
+
=
+
pe
intervalul [-3, 0];
c) S se determine maximumul aceleiai funcii pe intervalul [-1,
1];
d) S se calculeze
1
1
( ) f x dx
i
3
3
sin( ) * ( ) x g x dx
;
e) S se calculeze
2
2
1
x
dxdy
y +
pentru xmin=ymin=zmin=0,
xmax=ymax=zmax=1.
5. S se rezolve ecuaiile:
a) sin( ) cos( ) 0 x x x + = pentru valoarea iniial x=1;
b)
( )
2 2 2
3 ln 1 2 ln 2 0 x x x x + + + = , x=0.5;
c) S se reprezinte grafic funcia ( ) ( )
3
1 sin( )
x
f x x e x x x = +
i apoi s se determine toate rdcinile pe intervalul [-2, 2].
Indicaii i soluii.
1. p=[1 0 -7 -8 2 12]; q=[1 0 -5 0 4]; t=[1 0 4 0 -1 0 -4];
a) conv(conv(p,t),q);
8
15 13 12 11 10 9 8 7 6
5 4 3 2
8 8 8 20 134 124 137 340
94 76 144 320 32 192
x x x x x x x x x
x x x x x
+ + +
+ + +
b) [c,r]=deconv(p,q)
c=x;
3 2
2 8 2 12 r x x x = + ;
[c1,r1]=deconv(t,q);
2
1 9 c x = + ;
2
1 40 40 r x =
c) roots(p); x
1
=3, x
2
=-2, x
3
=-1+i, x
4
=-1-i, x
5
=1
roots(q); x
1
=1, x
2
=-1, x
3
=2, x
4
=-2
roots(t); x
1
=2i, x
2
=-2i, x
3
=1, x
4
=-1, x
5
=i, x
6
=-i
2.
a) v=[1 2 3 -4 -5]; s=poly(v);
( )
5 4 3 2
3 23 27 166 120 s x x x x x x = + +
b) polyval(s,2)=0, polyval(s,0)=-120; polyval(s,-7)=-
4320
c) polyval(polyder(s),1)=60; polyval(polyder(s),0)=166,
polyval(polyder(s),-1)=144
3.x=0:pi/10:pi; y=sin(x);
a) p4=polyfit(x,y,4);
( )
4 3 2
4
0.0368 x -0.2309 x + 0.0485 x + 0.9874 x+ 0.0002 P x =
b) polyval(p4,pi/2)-sin(pi/2)=0.00053993<10
-3
c) interp1(x,y,pi/2,'nearest'); 1
interp1(x,y,pi/2,'linear'); 1
interp1(x,y,pi/2,'spline'); 1
interp1(x,y,pi/2,'cubic'); 1
4.
a) fplot(inline('x.*sin(x)'),[-pi pi],'r');
fplot(inline('log(1+sin(x))'),[-pi pi],'m');
b) fminbnd(inline('(x.^4-5*x.^2+4)./(x.^6+4)'),-3,0) -
1.3072;
c) fminbnd(inline('-(x.^4-5*x.^2+4)./(x.^6+4)'),-1,1) 0;
d) quad(inline('x.*sin(x)'),-1,1); 0.6023
quad(inline('sin(x).*log(1+sin(x))'),-1,1); 0.6750
e) dblquad(inline('x.^2./(y.^2+1)'),0,1,0,1); 0.2618
9
f) triplequad(inline('1./sqrt(x+y+z+1)'),0,1,0,1,0,1);
0.6428
5.
a) fzero(inline('x.*sin(x)+cos(x)'),1); 2.7984
b) fzero(inline('x.^2.*sqrt(x.^2+3)+x.*log(x.^2+1)-2-
log(2)'),0.5); 1
c) fzero(inline('(x-1).*exp(x).*sin(x)+x.^3-x'),-1); -
1.2255
fzero(inline('(x-1).*exp(x).*sin(x)+x.^3-x'),0.1); 0
fzero(inline('(x-1).*exp(x).*sin(x)+x.^3-x'),0.9); 1
Se observ pe grafic faptul c avem rdcini n apropierea punctelor -1,
0.1 i 0.9 pe care le-am utilizat apoi n funcia fzero.
10