Cześć ma może ktoś w pascalu napisane rozwiązywanie funkcji y=ax+b tzn. wyszukiwanie współczynników a i b z zadanych x,y Metodą najmniejszych kwadratów.
Jakby ktoś miał , byłbym wdzięczny za przesłanie na [email protected].
Z góry dziekuje.
wiesz ze zrobie to inna metoda :) i jedno jest niestety :( bedzie trzeba podac wykres funkcji
np.
y=3x+2
juz sie za to zabieram niew iem czy mi sie uda ale... :)
cos zchrzanilem bo robie od poczatku dopiero teraz dokladnie rpzeczytalem twoj post :)
ble ;( a jednak mi sie nie udalo :( [glowa] [glowa] [glowa] [zawstydzony] [niepowiem]
Co znaczy metodą najmniejszych kwadratów?
Wzór funkcji liniowej y=ax+b można znaleźć mając dwa punkty na wykresie x1,y1 oraz x2,y2. Wystarczy ułożyć układ równań.
y1=ax1+b
y2=ax2+b
Dwa równania - dwa niewiadomowe a i b - układ można rozwiązać. Przeżucając na TP możemy zastosować:
VAR
a,b,x1,y1,x2,y2,s,d:integer;
BEGIN
x1:=3; //x i y dla przykładu podaje
x2:=6;
y1:=2;
y2:=0;
s:=-1000;
d:=-1000;
REPEAT
s:=s+1;
REPEAT
d:=d+1;
UNTIL ((y1=ax1+b) AND (y2=ax2+b)) OR (d>=1000);
UNTIL ((y1=ax1+b) AND (y2=ax2+b)) OR (s>=1000);
i gotowe :)
Oczywiście w/w przykład działa tylko na liczbach całkowitych z przedziału -999 do 1000. Jak ktoś chce lepszą procedure niech zwiększy przedział, a zamiast integer zastosuje REAL - no i wtedy zamiast 1, mozna mniejszą przedzałkę REPEAT stosować. (np. 0.001). Ale w takiej sytuacji marny los komputera... :)
Wzór funkcji liniowej y=ax+b można znaleźć mając dwa punkty na wykresie x1,y1 oraz x2,y2. Wystarczy ułożyć układ równań.
y1=ax1+b
y2=ax2+b
A nie lepiej tak:
a = (x2 - x1)/(y2 - y1)
b = y1 - a*x1
--
Vogel [[email protected]]
Life is just a dream, you know...
[Cowboy Bebop]
Jak się nie mylę to chodzi tu o prostą regresji liniowej, a to wymaga przepatrzenia wszystkich punktów jakie mamy dostępne!
Ja wyliczałem nachylenie dla kolejnych par punktów i brałem z tego średnią. Mając średnie nachylenie obliczałem dla każdego punktu z wartość wyrazu wolnego i też uśredniałem. Chodziło pięknie! powodzenia [cya]
Jezus Maria, Detox, najmniejsze kwadraty iteracyjnie!??
Vogel, przywracasz mi wiarę w ludzi :-) :-)
jesli y=ax+b i mamy n par (x,y) to
a=(nSUM(xy)-SUM(x) SUM(y)) / (nSUM(x2)-(SUM(x))2)
b=(SUM(y)/n - a*SUM(x)/n)
SUM (x*y) oznacze sume wszystkich iloczynow odpowiadajacych sobie x i y. Reszty mozna sie domyslec.
--
Pawel {Delphi 6 Personal}
Po pierwsze: naciśnij F1