Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
Polinoame în Matlab
c = 3 0 7 4 -6 12
Produsul a două polinoame este echivalent cu o operaţie de convoluţie c=conv(p,q). În c obţinem coeficienţii
polinomului produs.
Exemplu 2: Se cere să se calculeze polinoamele cât și rest al împărțirii lui p(x) la q(x)
cat = 3 0
rest = 0 0 -11 4
ans = 79
Exemplu 5: Se cere să se calculeze derivata polinomului p(x), derivata polinomului p(x)*q(x) şi derivata
polinomului p(x)/q(x)
k = 6 -2
ans =
-5.5000 - 1.1547i
-5.5000 + 1.1547i
>> [r,pol,k]=residue(p,q)
r =
-5.5000 - 1.1547i
-5.5000 + 1.1547i
pol =
0 + 1.7321i
0 - 1.7321i
k = 3 0
r1 r2 rj rj +1
Descompunerea este de forma: + + ... + + + ... + k ( x)
x − p1 x − p2 x − p j (x − p j )2
Rădăcinile numitorului se numesc poli, iar valorile de la numărător se numesc reziduuri.
Dacă polul pj este multiplu de ordinul m, el va introduce în descompunere m fracţii. Dacă gradul
numărătorului este mai mare decât al numitorului rezultă în plus un polinom k(x) care este câtul împărţirii
numărătorului la numitor.
Funcţia folosită este: [r,pol,k]=residue(p,q)
În r se obţin reziduurile, în p polii şi în k coeficienţii polinomului k.
Interpolarea unui set discret de date [xi,yi] presupune determinarea unei funcţii f(x) astfel ca f(xi)=yi, în
vederea completării setului de date în orice alt punct x0xi.
Exemplu: Fie date punctele de coordonate (x1,y1) şi (x2,y2).
Se cere estimarea valorii y(x), unde x1<x<x2.
Dacă punctele:
- sunt unite printr-o dreaptă, interpolarea se numeşte liniară, iar
- dacă sunt unite printr-un polinom de gradul 3, interpolarea este spline sau cubică.
O altă problemă constă în aproximarea unui set de date cu o funcţie care constituie „cea mai bună
aproximare”. Metoda celor mai mici pătrate furnizează cea mai bună aproximare în sensul minimizării
pătratului distanţelor dintre punctele date şi funcţia de aproximare.
1. Interpolarea datelor
Funcţia interp1() poate interpola datele după o lege liniară, cubică sau spline cubică.
Interpolarea liniară:
Dacă funcţia dintre două puncte poate fi estimată printr-o dreaptă, atunci valoarea funcţiei în orice punct x
dintre cele două valori se deduce expresia:
Exemplu 1:
x = 0:10;
y = sin(x);
xi = 0:.25:10;
subplot(1,2,1);
yi = interp1(x,y,xi);
plot(xi,yi,'-.or')
hold
plot(xi,sin(xi),'b')
subplot(1,2,2);
yi = interp1(x,y,xi,'spline');
plot(xi,yi,'-.or')
hold
plot(xi,sin(xi),'b')
x -2 -1 0 1 2
y=f(x) 6 2 3 1 7
Să se estimeze cu funcţia interp1 valoarea y ce corespunde lui x1=-1 şi x2=1.5, folosind cele trei metode de
la interpolarea funcţiei.
x=[-2,-1,0,1,2], y=[6,2,3,1,7]
x1=[-1,1.5]
y1L=interp1(x,y,x1,'linear')
y1S=interp1(x,y,x1,'spline')
y1C=interp1(x,y,x1,'pchip')
hold on
axis([-5,5,0,9]);
plot(x1,y1L,':pr');
plot(x1,y1S,':hg');
plot(x1,y1C,':*k');
hold off
2. Interpolarea spline
Curba spline este o curbă netedă, definită de un set de polinoame de gradul trei. Curba dintre fiecare
pereche este un polinom de gradul trei, calculat astfel încât să ducă la tranziţii netede de la un polinom de
gradul trei la altul.
Spre exemplu, şase puncte sunt conectate de cinci curbe diferite de gradul trei, ce constituie o funcţie
netedă.
Evaluarea polinomului de interpolare spline, în nodurile reţelei, se face cu funcția ppval, apelată cu,
v=ppval(pp, xx) care restituie valoarea în punctele xx ale polinomului conținut de pp, așa cum este construit
de funcţia spline.
x = sort(rand(10,1));
y = exp(x);
pp = spline(x,y);
x = ppval(pp,y)
Răspuns:
x = 3.4283
4.1322
4.3897
5.7004
5.7945
6.2750
9.5575
10.0719
10.5138
12.4470
Observaţie: Dacă Y conţine cu două valori mai mult decât X, prima şi ultima valoare reprezintă valorile
impuse pe capetele intervalului
Exemplu 3:
x = 0:10;
y = sin(x);
xi = 0:.25:10;
yi = spline(x,y,xi)
plot(xi,yi,'--or')
hold
plot(xi,sin(xi),'b')
x = -4:4;
y = [0 .15 1.12 2.36 2.36 1.46 .49 .06 0];
cs = spline(x,[0 y 0]);
xx = linspace(-4,4,101);
plot(x,y,'o',xx,ppval(cs,xx),'-');
3. Interpolarea bidimensională
Funcţia interp2 interpolează datele funcţiilor de două variabile după lege biliniară sau bicubică.
y/x 1 2 3 4
1 2 6 6 5
2 3 4 8 6
3 4 6 9 5
Să se estimeze valorile care corespund perechii (x,y)=(3.5, 2.5), cu funcţia interp2, folosind cele două
metode de interpolare a funcţiei.
x=1:4; %vect linilor constante
y=[1:3]'; %vect coloanelor constante
z=[ 2,6,6,5; 3,4,8,6; 4,6,9,5 ];
x1=3.5; y1=2.5;
z1BL=interp2(x,y,z,x1,y1,'linear')
z1BC=interp2(x,y,z,x1,y1,'cubic')
Răspuns:
z1BL = 7
z1BC = 8.0625
Metoda se poate aplica pentru a face aproximarea unui set de date printr-o linie dreaptă (regresie liniară),
şi apoi prin aproximarea unui polinom (regresie polinomială). Pentru ca aproximarea să fie considerată
„cea mai bună” suma pătratelor distanţelor de la fiecare punct la linia aproximată (linie sau polinom)
trebuie să fie minimă.
Exemplu 5: Să se aproximeze în sensul celor mai mici pătrate cu o regresie liniară setul de date: x=[0 1 2 3 4
5], y=[0 20 60 68 77 110].
x=0:5;
y=[0 20 60 68 77 110];
c=polyfit(x,y,1);
y1=c(1)*x+c(2); % dreapta ax+b
plot(x,y1,x,y,'or')
plot(x,y1,'b',x,y,'or')
hold
c1=polyfit(x,y,2);
% polinom ax^2+bx+c
y2=c1(1)*x.^2+c1(2)*x+c1(3);
plot(x,y2,'g',x,y,'*k'), grid
hold off
function y=f(x)
y=1./(x.^3-2*x-5);
>> Q = quad(@f,0,2)
Q = -0.4628
Q = -0.4628
Q = -0.4605
nr_iteratii = 41
Q = -9.8696
function z = f2(x, y)
z = y.*sin(x)+x.*cos(y);
>> Q = triplequad(inline('y.*sin(x)+z.*cos(x)'),0,pi,0,1,-1,1)
Q = 2.0000
Exemplu 7:
function u = f3(x,y,z)
u = y.*sin(x)+z.*cos(x);
>> Q = triplequad(@f3,0,pi,0,1,-1,1)
Exemplu 8: Prin metoda trapezelor se calculează integrala I = sin( x)dx pentru o diviziune
0
echidistantă de pas .
100
X = 0:pi/100:pi;
Y = sin(X);
% deoarece avem pas diferit de 1 se inmulteste diviziunea cu pasul
Z = pi/100*trapz(Y) % echivalent cu z = trapz(X,Y)
Z = 1.9998
X = 0:pi/100:pi;
Y = sin(X);
Z = trapz(X,Y)
Exemplul 10: Utilizarea unei diviziuni neechidistante (dar precizia obţinută e mai mică decât în
cazul diviziunii echidistante)
X = sort(rand(1,101)*pi);
Y = sin(X);
Z = trapz(X,Y)
Daca Y e o matrice, se caută prima dimensiune care are aceeaşi lungime cu X şi se face integrarea
în raport cu aceasta.
x 4 + 5x 3 − 9 x 2 + 7 x + 8
6. Să se descompună în fracții simple expresia
x3 − x 2 + x −1
9. Se cere:
a) Să se determine rădăcinile polinoamelor p1,p2,q1,q2 de la problema 2, respectiv 3
b) Să se determine rădăcinile polinomului p(x)= (3+i)x3 -6x2 +7ix -4+6i
(Interpolare)
12. Se consideră funcţiile f1(x)=cos(x), f2(x)=tan(x) şi f3(x)=exp(x) și 100 de puncte din x[-π,π]. Să
se reprezinte grafic în aceeași fereastră, în subgrafice diferite, funcţiile care aproximează pe f1, f2,
f3 folosind interpolarea liniară şi spline pe mulţimea de puncte w=0:π/10:π/2. Folosiți pentru
desenare marcatori diferiți și culori diferite. Adăugați câte o legendă pentru fiecare subgrafic știind
că acestea conțin 2 tipuri de interpolare pentru fiecare funcție. Adăugați un titlu fiecărui subgrafic.
13. Să se determine valoarea z de interpolare spline cubică pentru x0=2.6, unde x=[0,1,2,3,4,5],
y=[0,20,60,68,77,110]
b) Să se reprezinte grafic, într-o fereastră nouă, în același sistem de axe, doar prin linii de culori
diferite, curbele ce trec prin punctele (xi,yi) folosind interpolările liniare și spline pentru xi.
Adăugați câte o legendă pentru fiecare fereastră.
18. a) Să se refacă problema 11 de la punctul (d) aplicând metoda celor mai mici pătrate și folosind un
polinom de gradul 2.
b) Să se refacă problemele 11 de la punctul (d) aplicând metoda celor mai mici pătrate și folosind
un polinom de gradul 4.
19. Fie polinomul p(x)=x3-6x2+11x-6, peste care este suprapus un zgomot cu distribuţie normală.
Valoarea x aparține domeniului [0,4]. Aproximaţi în sensul celor mai mici pătrate datele rezultate
cu un polinom de gradul 3. Reprezentaţi gradele cu zgomot şi polinomul aproximant.
Indicaţie: y=polyval(p,x)+randn(size(x))
……………….
yc=polyval(c,x); plot(x,y,x,yc)
(Integrale)
sin x cos x dx
2
a)
0
10
(x − 4 x + 7)dx
3
b)
1
0
c) sin( x)dx
− pi / 2
cu evidenţierea tuturor valorilor intermediare