[COLOR=#a020f0]program[/color] linear_fit
[COLOR=#2e8b57][b]implicit[/b][/color] [COLOR=#2e8b57][b]none[/b][/color]
[COLOR=#0000ff]! Fitting line y = a*x + b to data points (Least Squares Method)[/color]
[COLOR=#2e8b57][b]integer[/b][/color] :: n
[COLOR=#2e8b57][b]double precision[/b][/color] :: x, y, [COLOR=#804040][b]&[/b][/color] [COLOR=#0000ff]! data points[/color]
Sx, [COLOR=#804040][b]&[/b][/color] [COLOR=#0000ff]! Sx = x1 + x2 + ..[/color]
Sy, [COLOR=#804040][b]&[/b][/color] [COLOR=#0000ff]! Sy = y1 + y2 + ..[/color]
Sxx, [COLOR=#804040][b]&[/b][/color] [COLOR=#0000ff]! Sxx = x1*x1 + x2*x2 + ..[/color]
Sxy, [COLOR=#804040][b]&[/b][/color] [COLOR=#0000ff]! Sxy = x1*y1 + x2*y2 + ...[/color]
a, b, [COLOR=#804040][b]&[/b][/color] [COLOR=#0000ff]! coefficients of line: y = a*x + b[/color]
Sres, [COLOR=#804040][b]&[/b][/color] [COLOR=#0000ff]! Sum of squared residuals[/color]
rr, [COLOR=#804040][b]&[/b][/color] [COLOR=#0000ff]! coefficient of determination: rr = Sc/Sd[/color]
Sf, [COLOR=#804040][b]&[/b][/color] [COLOR=#0000ff]! Sum of squared fiffrences betwen fit and mean [/color]
Sd, [COLOR=#804040][b]&[/b][/color] [COLOR=#0000ff]! Sum of squared fiffrences betwen data and mean [/color]
y_mean [COLOR=#0000ff]! y_mean = Sy/n[/color]
[COLOR=#0000ff]! open file[/color]
[COLOR=#804040][b]open[/b][/color] ([COLOR=#804040][b]unit[/b][/color] [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]10[/color], [COLOR=#804040][b]file[/b][/color] [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]'linear_fit_data.txt'[/color], [COLOR=#804040][b]status[/b][/color] [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]'unknown'[/color])
n [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]
x [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]; y [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]
Sx [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]; Sy [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]; Sxx [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]; Sxy [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]
[COLOR=#0000ff]! read data and compute sums[/color]
[COLOR=#804040][b]do[/b][/color] [COLOR=#804040][b]while[/b][/color] ([COLOR=#ff00ff].true.[/color])
[COLOR=#804040][b]read[/b][/color] ([COLOR=#ff00ff]10[/color], [COLOR=#804040][b]*[/b][/color], [COLOR=#804040][b]end[/b][/color][COLOR=#804040][b]=[/b][/color][COLOR=#804040][b]99[/b][/color]) x, y
[COLOR=#0000ff]!write(*,*) x, y[/color]
n [COLOR=#804040][b]=[/b][/color] n [COLOR=#804040][b]+[/b][/color] [COLOR=#ff00ff]1[/color]
Sx [COLOR=#804040][b]=[/b][/color] Sx [COLOR=#804040][b]+[/b][/color] x
Sy [COLOR=#804040][b]=[/b][/color] Sy [COLOR=#804040][b]+[/b][/color] y
Sxx [COLOR=#804040][b]=[/b][/color] Sxx [COLOR=#804040][b]+[/b][/color] x[COLOR=#804040][b]*[/b][/color]x
Sxy [COLOR=#804040][b]=[/b][/color] Sxy [COLOR=#804040][b]+[/b][/color] x[COLOR=#804040][b]*[/b][/color]y
[COLOR=#804040][b]end do[/b][/color]
[COLOR=#804040][b] 99 continue[/b][/color] [COLOR=#0000ff]! end of file[/color]
[COLOR=#0000ff]! compute the line coefficients[/color]
a [COLOR=#804040][b]=[/b][/color] (n[COLOR=#804040][b]*[/b][/color]Sxy [COLOR=#804040][b]-[/b][/color] Sx[COLOR=#804040][b]*[/b][/color]Sy)[COLOR=#804040][b]/[/b][/color](n[COLOR=#804040][b]*[/b][/color]Sxx [COLOR=#804040][b]-[/b][/color] Sx[COLOR=#804040][b]**[/b][/color][COLOR=#ff00ff]2[/color])
b [COLOR=#804040][b]=[/b][/color] (Sy [COLOR=#804040][b]-[/b][/color] a[COLOR=#804040][b]*[/b][/color]Sx)[COLOR=#804040][b]/[/b][/color]n
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Total number of data points = '[/color], n
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Line computed: y = '[/color], a, [COLOR=#ff00ff]'*x + '[/color], b
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#804040][b]*[/b][/color])
[COLOR=#0000ff]! now reading the data again to determine quality of the fit[/color]
[COLOR=#804040][b]rewind[/b][/color]([COLOR=#ff00ff]10[/color])
x [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]; y [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]
Sres [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]; Sf [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]; Sd [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]
y_mean [COLOR=#804040][b]=[/b][/color] Sy[COLOR=#804040][b]/[/b][/color]n
[COLOR=#804040][b]do[/b][/color] [COLOR=#804040][b]while[/b][/color] ([COLOR=#ff00ff].true.[/color])
[COLOR=#804040][b]read[/b][/color] ([COLOR=#ff00ff]10[/color], [COLOR=#804040][b]*[/b][/color], [COLOR=#804040][b]end[/b][/color][COLOR=#804040][b]=[/b][/color][COLOR=#804040][b]999[/b][/color]) x, y
[COLOR=#0000ff]!write(*,*) x, y[/color]
Sres [COLOR=#804040][b]=[/b][/color] Sres [COLOR=#804040][b]+[/b][/color] (a[COLOR=#804040][b]*[/b][/color]x [COLOR=#804040][b]+[/b][/color] b [COLOR=#804040][b]-[/b][/color] y)[COLOR=#804040][b]**[/b][/color][COLOR=#ff00ff]2[/color]
Sf [COLOR=#804040][b]=[/b][/color] Sf [COLOR=#804040][b]+[/b][/color] (a[COLOR=#804040][b]*[/b][/color]x [COLOR=#804040][b]+[/b][/color] b [COLOR=#804040][b]-[/b][/color] y_mean)[COLOR=#804040][b]**[/b][/color][COLOR=#ff00ff]2[/color]
Sd [COLOR=#804040][b]=[/b][/color] Sd [COLOR=#804040][b]+[/b][/color] (y [COLOR=#804040][b]-[/b][/color] y_mean)[COLOR=#804040][b]**[/b][/color][COLOR=#ff00ff]2[/color]
[COLOR=#804040][b]end do[/b][/color]
[COLOR=#804040][b] 999 continue[/b][/color] [COLOR=#0000ff]! end of file[/color]
[COLOR=#0000ff]! compute coefficient of determination[/color]
rr [COLOR=#804040][b]=[/b][/color] Sf[COLOR=#804040][b]/[/b][/color]Sd
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Quality of the fit:'[/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Sum of squared residuals = '[/color], Sres
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Coefficient of determination = '[/color], rr
[COLOR=#0000ff]! close file[/color]
[COLOR=#804040][b]close[/b][/color]([COLOR=#ff00ff]10[/color])
[COLOR=#a020f0]end program[/color] linear_fit