Fortran/Przykłady/Metoda najmniejszych kwadratów
Wygląd
< Fortran
Poniższy program w FORTRAN-77 przybliża punkty pomiarowe prostą o równaniu y = ax + b wyliczając wartości współczynników a i b oraz ich niepewności.
PROGRAM metoda_najmniejszych_kwadratow
REAL x(20), y(20), a, b, xSredn, D,
1 yDelta, aDelta, bDelta
INTEGER n
PRINT *,
PRINT *,
PRINT *, 'Program dopasowuje prosta do zbioru punktow'
PRINT *, 'doswiadczalnych wykorzystujac metode najmniejszych'
PRINT *, 'kwadratow, ponadto oblicza odchylenia standardowe'
PRINT *, 'obydwu parametrow prostej.'
PRINT *,
PRINT *, 'Wprowadz liczbe punktow dosw. (min=3,maks=20)..'
READ *, n
IF ( (n.GT.20) .OR. (n.LT.3) ) THEN
PRINT *, 'Liczba spoza zakresu !!'
STOP
ENDIF
PRINT *, 'Wprowadz wspolrzedne punktow (na przemian: odcieta'
PRINT *, 'i rzedna oddzielone spacja lub ENTER bez nawiasow'
PRINT *, 'i przecinkow, wartosci calkowite od dziesietnych'
PRINT *, 'oddzielone kropka)...'
READ *, (x(i), y(i), i=1, n)
xSredn=0
DO i=1, n
xSredn = xSredn + x(i)
ENDDO
xSredn = xSredn / n
D=0
DO i=1, n
D = D + ( x(i) - xSredn )**2
ENDDO
IF (D.EQ.0) THEN
PRINT *, 'Wprowadzone punkty sugeruja, ze szukana prosta'
PRINT *, 'bedzie rownolegla do osi Oy, co uniemozliwia'
PRINT *, 'obliczenie wartosci wspolczynnikow a i b rownania.'
STOP
ENDIF
a=0
DO i=1, n
a = a + y(i) * ( x(i) - xSredn )
ENDDO
a = a / D
b=0
DO i=1, n
b = b + ( y(i) - a*x(i) )
ENDDO
b = b / n
yDelta = 0
DO i=1, n
yDelta = yDelta + ( y(i) - a*x(i) - b )**2
ENDDO
yDelta = yDelta / (n-2)
yDelta = SQRT(yDelta)
aDelta = yDelta / SQRT( D )
bDelta = yDelta * SQRT( 1/n + (xSredn**2)/D )
PRINT *, 'Wprowadzone punkty najlepiej przybliza prosta:'
PRINT *, ' y =', a, ' x +', b, ' ,'
PRINT *, 'przy czym bledy wspolczynnikow a i b maja wartosc odp.:'
PRINT *, ' ', aDelta, ' , ', bDelta
END