Метод наименьших квадратов - Pascal ABC (12829)
Формулировка задачи:
Привет всем. Нужно составить программу, которая будет вычислять методом наименьших квадратов. Также должен присутствовать коэффициент корреляции. Сделал программу, вычисляет коэффициенты a и b правильно, но коэффициент корреляции неправильно вычисляет. Формулу брал из "Википедии". (https://ru.wikipedia.org/wiki/Корреляция). Помогите пожалуйста разобраться. Заранее спасибо!
Вот код:
Листинг программы
- Program MNK;
- Var x,y: array [1..100] of integer;
- l,w,e,t,u,a,b,r,xm,ym,sxy,sx,sy,px,py,Q:real;
- n,i:integer;
- begin
- writeln('введите количество точек');
- readln(n);
- For i:=1 to n Do begin
- Writeln('Введите координату х для точки, ',i,' ');
- Readln(x[i]);
- end;
- For i:=1 to n Do begin
- Writeln('Введите координату у для точки ',i,'');
- Readln(y[i]);
- end;
- for i:=1 to n do
- l:=l+n*x[i]*y[i];
- for i:=1 to n do
- w:=w+x[i];
- for i:=1 to n do
- e:=e+y[i];
- for i:=1 to n do
- t:=t+n*sqr(x[i]);
- for i:=1 to n do
- u:=u+x[i];
- u:=sqr(u);
- for i:=1 to n do
- a:=(l-w*e)/(t-u);
- writeln('коэффициент а=',a);
- for i:=1 to n do
- b:= (e-a*w)/n;
- writeln('коэффициент b=',b);
- for i:=1 to n do
- Q:=Q+sqr(y[i]-(a*x[i]+b));
- writeln('среднеквадратичная функция Q= ',Q);
- for i:=1 to n do begin
- xm:=xm+x[i]/n;
- ym:=ym+y[i]/n;
- sxy:=sxy+(x[i]-xm)*(y[i]-ym);
- px:=px+(sqr(x[i]-xm));
- py:=py+(sqr(y[i]-ym));
- r:=sqr((sxy)/(sqrt(px*py))) ;
- end;
- writeln('коэффициент корреляции r= ',r);
- end.
Решение задачи: «Метод наименьших квадратов»
textual
Листинг программы
- r:=sxy/sqrt(px*py);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д