Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Исходники Форум Информер Страны мира
   Математика    >>    linfit
   
 
 Fit a Straight Line through n Points   murph 28.02.2001

Тривиальная реализация линейной регрессии методом наименьших квадратов (МНК). Берет на вход два массива координат X и Y, массив, в который будут помещены вычисленные Y (y_calc), две переменные, в которые будут помещены коэффициенты прямой (a, b), число пар точек, переменные, в которые будут помещены коэффициент корреляции и стандартные отклонения для x и y (correl, sigma_a, sigma_b).



2k 
 

{ downloaded from some algorithm collection} {159} {update ->} {166} {update ->} {ХБЗ} { modified by murph 28.02.2001 } {Тривиальная реализация линейной регрессии методом наименьших квадратов (МНК). Берет на вход два массива координат X и Y, массив, в который будут помещены вычисленные Y (y_calc), две переменные, в которые будут помещены коэффициенты прямой (a, b), число пар точек, переменные, в которые будут помещены коэффициент корреляции и стандартные отклонения для x и y (correl, sigma_a, sigma_b). Вот так. Вот код покрасивше: } procedure linfit(x,y: array of real; var y_calc: array of real; var a,b: real; n: integer; var correl: real;Var sigma_a: real;var sigma_b:real); { fit a straight line (y_calc) through n sets of x and y pairs of points } var i : integer; sum_x,sum_y,sum_xy,sum_x2, sum_y2,xi,yi,sxy,syy, sxx : real; see:real; begin { linfit } sum_x:=0.0; sum_y:=0.0; sum_xy:=0.0; sum_x2:=0.0; sum_y2:=0.0; for i:=1 to n do begin xi:=x[i]; yi:=y[i]; sum_x:=sum_x+xi; sum_y:=sum_y+yi; sum_xy:=sum_xy+xi*yi; sum_x2:=sum_x2+xi*xi; sum_y2:=sum_y2+yi*yi; end; sxx:=sum_x2-sum_x*sum_x/n; sxy:=sum_xy-sum_x*sum_y/n; syy:=sum_y2-sum_y*sum_y/n; b:=sxy/sxx; a:=((sum_x2*sum_y-sum_x*sum_xy)/n)/sxx; correl:=sxy/sqrt(sxx*syy); see:=sqrt((sum_y2-a*sum_y-b*sum_xy)/(n-2)); sigma_b:=see/sqrt(sxx); sigma_a:=sigma_b*sqrt(sum_x2/n); for i:=1 to n do y_calc[i]:=a+b*x[i] end; { LINFIT }