StartAlgorytmyProcedury numeryczneMetoda najmniejszych kwadratów
Baza Wiedzy
Wersja offline serwisu przeznaczona na urządzenia z systemem Android.

Darowizny
darowiznaWspomóż rozwój serwisu


Nagłówki RSS
Kanał artykuły
Kanał implementacje
Kanał komentarze
Kanał forum


Bookmarki









Sonda
Implementacji w jakim języku programowania poszukujesz?
 
Metoda najmniejszych kwadratów
Ocena użytkowników:+---- / 2
SłabyŚwietny 
Wpisany przez Andrzej Borucki
wtorek, 06 grudnia 2011 20:09
Mamy zbiór n punktów (xi, yi) dla których chcielibyśmy dopasować funkcję liniową y = ax + b.
Należy znaleźć takie dwie liczby rzeczywiste a oraz b aby jak najwięcej punktów leżało blisko tej prostej. Jako kryterium przyjmujemy minimalizację sumy kwadratów różnic między punktami yi a wyliczonym y = axi + b.
Suma kwadratów różnic charakteryzuje się tym że:

Przykładowy wynik metody:

metoda najmniejszych kwadratów - przykład


Mamy wyliczyć i zminimalizować:
(y1 - ax1 - b)2 + (y2 - ax2 - b)2 + ... + (yn - axn - b)2 = f(a, b)

Suma kwadratów różnic zawsze będzie ≥ 0 a równa zero tylko w przypadku gdy wszystkie punkty leżą na prostej y = ax + b, Funkcja ma jedno ekstremum i jest to minimum.
Punkt minimum osiągany jest dla (a, b) takiego, że obie pochodne cząstkowe ∂f(a, b) / ∂a oraz ∂f(a, b) / ∂b są zerowe.

metoda najmniejszych kwadratów


Dla większej czytelności wprowadzamy wartości stałe niezależne od a oraz b:
metoda najmniejszych kwadratów - stałe pomocnicze


Pierwsze równanie ma postać:

metoda najmniejszych kwadratów - pierwsze równanie


Używając wprowadzonych stałych:
(1) Sxy - aSxx - bSx = 0

Podobnie wyprowadzamy drugie równanie:

metoda najmniejszych kwadratów - drugie równanie


Używając wprowadzonych stałych:
(2) Sy - aSx - n*b = 0

Równania (1) i (2) stanowią układ dwóch równań liniowych z dwiema niewiadomymi a i b Z (2) wyznaczamy b = (Sy - aSx) / n i wstawiamy do (1).

metoda najmniejszych kwadratów - parametry a oraz b


Otrzymane a i b w mianowniku mają to samo wyrażenie, więc zastąpmy je przez delta = Sx2 - Sxxn
Ostatecznie:
a = (SxSy - Sxyn) / delta
b = (SxSxy - SxxSy) / delta



Autor Język programowania Komentarz Otwórz Pobierz Ocena
Andrzej Borucki Delphi/Pascal
Implementacja w Delphi/Pascal
Implementacja w Delphi/Pascal
++--- / 3
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie



Poprawiony: wtorek, 06 grudnia 2011 20:19

Dodaj komentarz

Kod antysapmowy
Odśwież