Aproksimacija

Metoda najmanjih kvadrata

Neka je funkcija koja je zadata tabelarno: , .

Funkcija kojom je aproksimiramo je oblika:

gde su , neke, unapred poznate, linearne nezavisno funkcije (generalisani polinomi). Cilj nam je da nađemo, po nekom kriterijumu, najbolju aproksimaciju funkcije traženog oblika. Mi ćemo tu funkciju, odnosno koeficijente tražiti kao rešenje narednog problema minimizacije:

Iz očiglednih razloga, određivanje tražene funkcije se zove metodom najmanjih kvadrata.

Ako je , i , tada se zadatak može zapisati i kao

Pokazuje se da se vektor vrednosti nepoznatih koeficijenata dobija iz jednačine:

U nastavku je data implementacija metode najmanjih kvadrata.

% function LeastSquares(x,y,f);

% n = length(x); %pretpostavka je da su x i y korektno uneti, tj. iste duzine

% m = length(f);

% A = zeros(n,m);

% for i = 1:m

% A(:,i) = f{i}(x);

% end

% a = (A'*A)\(A'*y');

% fprintf('Koeficijenti vektora a:');

% disp(a);

% F = @(x)0; %formiramo aproksimacionu funkciju

% for i = 1:m

% F = @(x)(F(x)+a(i)*f{i}(x));

% end

% figure()

% scatter(x,y);

% hold on

% fplot(F);

% hold off

% end

x = [1 2 3 4 5];

y = [1.03024 2.36754 2.35998 2.03112 2.26003];

f1 = @(x)sin(x);

f2 = @(x)exp(-x);

f3 = @(x)log(x);

f = {f1,f2,f3};

LeastSquares(x,y,f);

Koeficijenti vektora a:
    0.9998
    0.5151
    1.9999

Polinomska regresija

Ako je , odnosno ako je aproksimaciona funkcija klasičan polinom, tada je

a koeficijente dobijamo iz matrične jednačine:

Posebno nam je od interesa slučaj kada je aproksimacioni polinom prvog stepena, , i tada govorimo o linearnoj regresiji. Koeficijenti se dobijaju iz sistema:

U nastavku je data jednostavna implementacija linearne regresije. Pretpostavka je da su podaci korektno uneti.

% function a = LinearRegression(X,Y)

% n = length(X);

% L(1,1) = n; %L je matrica sistema iz kog dobijamo a0 i a1

% L(1,2) = sum(X);

% L(2,1) = L(1,2);

% L(2,2) = sum(X.*X);

% d(1,1) = sum(Y); %desna strana sistema

% d(2,1) = sum(X.*Y);

% a = L\d;

% aPoly = flip(a); %pravimo polinom od dobijenog vektora

% fprintf('Aproksimaciona funkcija: F(x) = %.4f*x+%.4f', aPoly(1),aPoly(2));

% figure() %prikaz podataka i aproksimacione funkcije

% scatter(X,Y);

% hold on

% plot(X,polyval(aPoly,X));

% hold on

% end

X = linspace(0,2,100);

Y = exp(X)+sin(X)+rand(1,100);

a = LinearRegression(X,Y);

Aproksimaciona funkcija: F(x) = 3.5455*x+0.8721