Sunteți pe pagina 1din 9

CURSUL 3.

APROXIMAREA FUNCIILOR PRIN


AJUSTARE

Ajustarea datelor prin Metoda Celor Mai Mici Ptrate

Fie n+1 puncte x0, x1, .., xn n care se cunosc valorile unei funcii f(x). Metoda
celor mai mici ptrate se folosete la prelucrarea matematic a datelor x0, x1, .., xn
n urmtoarele cazuri: cnd n este foarte mare, sau cnd valorile funciei n
punctele considerate nu sunt exacte, fiind obinute experimental.
Prin aceast metod funcia f(x) se aproximeaz cu
F m( x ) =

ci * i ( x ), cu m<n

i =0

unde i ( x ) sunt funcii liniar independente.


Avnd date punctele x0, x1, .., xn din intervalul [a,b] i fi=f(xi) cu i=0..n se cere
determinarea lui Fm(x) astfel nct diferena
n

[ f ( xi ) Fm ( xi )]2

i =0

sau

p( xi )[ f ( xi ) Fm ( xi )]2

cu functia pondere p(x)>0

i =0

s fie minim. nlocuim Fm(x) cu o funcie de constantele c0, .., cm. Se pune
problema determinrii acestor constante cj, j=0..m, astfel nct
(c0 ,.., cm ) =

[ fi

i =0

c j j ( xi )]2
j =0

s fie minim. Determinarea constantelor se face rezolvnd sistemul

= 0, i = 0..m
ci

adic a sistemului

[ fi

i =0

c j j ( xi )]0 ( xi ) = 0
j =0

i =0

j =0

[ f i c j j ( xi )]m ( xi ) = 0

Sistemul de mai sus se mai poate scrie i sub forma urmtoare:


n m

c j j ( xi )0 ( xi ) =

i =0 j =0

f i 0 ( x i )

i =0

n m

i =0 j =0

i =0

c j j ( xi )m ( xi ) = f i m ( xi )

De obicei n practic se consider i ( x ) = x i , i = 0..m , caz n care avem


Fm(x)=c0+c1x++cmxm,
iar sistemul de rezolvat este:
n

i =0

i =0

c0 ( n + 1) + c1 xi + .. + cm xim =

fi

i =0

..
n

i =0

i =0

i =0

c0 xim + c1 xim +1 + .. + cm xi2 m =

f i xim

i =0

Exemplu:
S considerm tabelul:
X

2,5

3,5

6,5

Se vede c datele se aeaz aproximativ de-a lungul unei drepte y=ax+b. Dreapta,
dat de metoda celor mai mici ptrate, care ajusteaz mulimea dat de puncte are
coeficienii a i b dai de condiia ca expresia E ( a, b) = ( y i ax i b) s fie
2

minim.

Aceasta implic:

E (a, b)
=0
a

(1)

E (a, b)
=0
b

Se obine sistemul:
S 2 x a + S1x b = S xy

S1x a + pb = S1 y

(2)

unde :
S 2 x = x i2 S1x = x i S xy = x i y i S1 y = y i
i

(3)

iar p este numrul de date. Avem mai jos graficul acestei drepte.

y = 1.25x + 0.3571
10
9
8
7
6
5
4
3
2
1
0
1

Mai general putem considera ajustari ale lui f prin expresii de forma
f(x) a0+a1x+a2x2+....+ahxh. Coeficienii ai, conform metodei celor mai mici
ptrate sunt dai de condiia ca expresia E (a0 , a1 ,... ah ) =

(y

k = 0.. p

a0 ... ah x h ) 2 s fie

minim, deci:
E
= 0, i = 0, 1,... h
ai

(4)

Rezolvarea sistemului (4) este dificila n multe situatii, sistemul fiind n general
neliniar si uneori singular. In cazul cnd sistemul este liniar rezolvarea lui este
relativ simpla.
Algoritmul Levenberg-Marquardt
Chiar daca sistemul (4) este singular functia E (a0 , a1 ,... ah ) =

(y

k = 0.. p

a0 ... ah x h ) 2

are un minim si programele standard de matematica precum scilab sau matlab l


determina. Sistemul (4) se mai poate scrie:
h

M k ,l al = N k , pentru k = 1,2 ,...h


l =1

unde M k ,l = xik +l 2 si N k = xik 1 yi .


i

Sunt situatii cand modelul ales este neadecvat; Un program care sa determine o
formula potrivita pentru ajustarea unor date experimentale ar trebui sa aiba
memorate un numar mare de modele de functii model depinznd de unul sau mai
multi

parametri

E (a0 , a1 ,... ah ) =

(y

k = 0.. p

si
k

metoda

de

determina

minimul

expresiei

a0 ... ah x h ) 2 pentru fiecare model.

1 n
Modelul pentru care R = ( f ( xi ,a1 ,...,an ) y i )2 are cea mai mica valoare este
n i =1
n principiu modelul cel mai bun. Divizarea cu n este facuta pentru a anula efectul
numarului de puncte asupra lui R.

r
Pentru functii f : Rm R depinznd de x = ( x1 , x2 ,..., xm ) tehnica ajustarii este
r
aceeasi, doar ca functiile model depind de x R m , deci sunt de forma
r
f ( x ,a1 ,...,a p ) . Avem
r
2
E( a1 ,...,a p ) = ( f ( xi a1 ,...,a p ) yi )

(5)

r
unde xi = ( xi ,1 ,..., ai ,m ) R m

Pentru minimizarea lui E( a1 ,a 2 ,...a p ) exista un algoritm numit "Levenberg-

Marquardt" care este implementat n mai multe programe ca, de exemplu, scilab
sau matlab.

Minimalizarea expresiei (5) in scilab


r
Ca date de intrare avem un tabel cu date experimentale ( xi , yi )i =1..n si o functie
r
model f ( x ,a1 ,...,a p ) . Se cere determinarea parametrilor a1 ,...,a p astfel ca (5) sa

fie minima.
Procedura scilab pentru determinarea parametrilor este lsqrsolve care are forma

[a,v,[info]]=lsqrsolve(a0,e,n,[stop],[diag])
unde:

a - vectorul cu componentele cautate a1 ,...,a p .


r
v - vectorul cu diferentele f ( xi a1 ,..., a p ) yi pentru valoarea lui a gasita de
program

info - este numar a carui valoare depinde de modul de terminare al programului: 0


- parametrii de intrare sunt incorecti; 1-algoritmul estimeaza atol (vezi intrarea
stop), adica eroarea relativa ntre a si solutia exacta, a fost atinsa; 2 - a fost atins
numarul maxim maxeval (vezi intrarea stop) de evaluari pentru functia e; 3 - atol
este o valoare prea mica si nu poate fi atinsa; 4 - iteratiile nu progreseaza
satisfacator.

a0 - un vector cu valori initiale pentru a


e - o functie de forma e(a, n) unde a este vectorul parametrilor a1 ,...,a p , iar n este
r
numarul de date ( xi , yi ) din tabelul de intrare. Valoarea functiei e este un vector cu
n componente
r
f ( x1 ,a ) y1
r

f ( x2 ,a ) y 2
..................
r

f ( x ,a ) y

n
n

stop - este un vector optional cu conduitii de oprire a algoritmului, stop=[etol,


atol, gol, maxeval, epsfcn, factor], cu valorile implicite [1.d-8,1.d-8,1.d5,1000,0,100].
Semnificatiile unor parametri sunt:

atol - eroarea relativa maxima admisa intre doua valori iterative consecutive ale lui
a (daca se obtine o eroare relativa mai mica, programul se opreste)

maxeval - numarul maxim de apeluri ale functiei e (daca se atinge acest maxim,
programul se opreste)

diag - este un vector de ponderi


Un exemplu de utilizare a acestei rutine este dat mai jos.
a1=1;a2=-1;a3=2;a4=0.5;
a0=[10;10;-10;10];
a=a0;
//definim o functie model
deff(y=F(x),y=a1*x(1)+a2*x(2)+a3*sin(x(3))+a4*x(4)*x(5));
//definim o matrice de date
data=rand(500,5);
//definim y=F(x)
y=zeros(500,1);
for i=1:500
x=data(i,1:5);
y(i)=F(x);
end
//stop=[1.d-10, 1.d-12, 1.d-5, 50000, 0, 100];
//ne pregatim de optimizare
//functia de optimizat
function dif=e(a,n)
dif=a(1)*data(:,1)+a(2)*data(:,2)+a(3)*sin(data(:,3))...
+a(4)*data(:,4).*data(:,5)-y;
endfunction
//este apelataa rutina de optimizare
[a,v]=lsqrsolve(a0,e,size(data,1));
a
norm(v,.inf.)

Rezultatele ntoarse sunt


a=
! 1. !
! - 1. !
! 2. !
! 0.5 !

Valorile exacte ale parametrilor sunt 1, -1, 2, 0.5.


r
Norma vectorului diferentelor f ( xi a1 ,..., a p ) yi este 4.441D-16 .
In programul de mai sus am construit pe y dupa formula
yi = a1 xi ,1 + a2 xi ,2 + a3 sin( xi ,3 ) + a4 xi ,4 xi ,5 si am cerut programului sa determine (a1,
a2, a3, a4)
plecnd de la a0 = (10, 10;-10; 10) n functia model
r
f (x ,a1 ,a 2 ,a3 ,a 4 ) = a1 x1 + a 2 x2 + a3 sin( x3 ) + a 4 x4 x5 . Dupa cum se vede s-a obtinut
valoarea exacta pentru a.

Pentru a apela procedura pentru un numar mai mare de modele putem aranja
calculele ca mai jos:
// multitest pentru functii de o variabila
//valoarea initiala a parametrilor a
a0=[1;1;1;1;1;1;1;1;1;1;1];
//numarul maxim admis de parametri necunoscuti este 10;
//functiiile model pentru ajustare
nrmodele=3;
function val=model(itip,a,x)
select itip
case 1 then val=a(1)+a(2)*x;
case 2 then val=a(1)+a(2)*x+a(3)*x.^2;
case 3 then val=a(1)+a(2)*x+a(3)*x.^2+a(3)*x.^3;
end
endfunction
//functia pentru procedura lsqrsolve
function dif=e(a,n);
dif=model(itip,a,x)-y;
endfunction
//datele de ajustat
x=[1;2;3;4;5;6;7;8;9;1.5;2.5;3.5];
y=[2;5;9;17;24;40;50;65;80;3;5;10];
n=length(x);
// testarea tuturor modelelor
r=zeros(nrmodele,1);
for itip=1:nrmodele
[a,v]=lsqrsolve(a0,e,n);
//discrepanta intre model si datele reale
r(itip)=norm(v,2)/n;
end
//discrepanta minima
[rmin,itip]=min(r);
//parametrii la discrepanta minima
[a,v]=lsqrsolve(a0,e,n);
//tiparim punctele si functia care ajusteaza
plot(x,y,ro);
xgrid;
stanga=min(x);dreapta=max(x);
t=(stanga:0.1:dreapta);
vt=model(itip,a,t);
plot(t,vt,b:);

Se obtine urmatorul grafic, pe care se vad punctele date si graficul functiei care le
ajusteaza. Dintre cele trei modele, n acest caz modelul 2 este cel mai bun (r este
minim)

Exemplu
S se ajusteze printr-un polinom de gradul m=3, urmtoarele date experimentale:

x=[-2, -1, 0, 1, 2] i y=[12, 6, 2, 0, 0]

Rezolvare n Scilab
Program de ajustare printr-un polinom generalizat de grad m. Apelarea se face
pentru datele din exemplu.
function c=CeleMaiMiciPatrate(x,y,m)
n=length(x);
for k=1:2*m+1
s(k)=0;
for i=1:n
s(k)=s(k)+x(i)^(k-1);
end
end
for k=1:m+1
b(k)=0;
for i=1:n
b(k)=b(k)+y(i)*x(i)^(k-1);
end
end
for i=1:m+1
for j=1:m+1
a(i,j)=s(i+j-1);
end

end
c=a^(-1)*b;
endfunction
CeleMaiMiciPatrate([-2 -1 0 1 2],[12 6 2 0 0],3)
ans =
! 2. !
! - 3. !
! 1. !
! 0. !

Exerciii
1. S se scrie expresia polinomului din exemplul de mai sus i s se reprezinte pe
acelai grafic datele experimentale i polinomul.
2. Se consider urmtoarele date experimentale:

xi

0.5

1.5

yi

1.1276

1.5431

2.3534

Se cere:
a) s se calculeze valoarea lui y pentru x=0.25 folosind o parabol pentru ajustarea
datelor experimentale prin metoda celor mai mici ptrate;
b) s se ajusteze aceste date printr-o hiperbol folosind metoda celor mai mici
ptrate, apoi s se reprezinte grafic;
c) s se ajusteze prin y=a*sin(x)+b datele experimentale de mai sus.

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