powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как найти уравнение средней линии?
3 сообщений из 3, страница 1 из 1
Как найти уравнение средней линии?
    #39730828
sergeysg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как найти уравнение средней линии? В Excel это называется "линия тренда".
Т.е., есть график, по оси X точки, по оси Y - соответствующие им точки. Нужно найти уравнение вида y=ax+b.
К примеру, при x=1, y=2, при x=2, y=3, при x=3, y=4.
Уравнение должно получиться y=x+1, т.е., a=1, b=1.
Метод наименьших квадратов, вроде бы, не работает. При таком маленьком кол-ве точек. Можно даже начать с 2-х точек. Получается a=5, b=-9. А если эти же варианты размножить, т.е., сделать много повторяющихся значений x=(1;2;3;1;2;3;1;2;3;...);y=(2;3;4;2;3;4;2;3;4;...), то значения a и b будут приближаться (но не равны) к 1;1. А если же сделать перевес какого-нибудь одного числа, к примеру, x=(1;2;3;1;1;1;...);y=(2;3;4;2;2;2;...), то тогда вообще не будут подходить, хотя это то же самое.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
var x,y:array of double;
    i:integer;
    sum1,sumsqr1,sumx,sumy:double;
    a1,b1,c1,a2,b2,c2:double;
    d:double;
    a,b:double;

SetLength(x,3);
SetLength(y,3);
x[0]:=1; x[1]:=2; x[2]:=3;
y[0]:=2; y[1]:=3; y[2]:=4;
sum1:=0;
for i:=0 to Length(x)-1 do sum1:=sum1+x[i]*y[i];
sumsqr1:=0; sumx:=0; sumy:=0;
for i:=1 to Length(x)-1 do
  begin
  sumsqr1:=sumsqr1+sqr(x[i]);
  sumx:=sumx+x[i];
  sumy:=sumy+y[i];
  end;
a1:=sumsqr1; b1:=sumx; c1:=sum1;
a2:=sumx; b2:=Length(x)-1; c2:=sumy;

d:=a1*b2-a2*b1;
if d=0 then Memo1.Lines.Add('system is not determined')
else
  begin
  a:=(c1*b2-c2*b1)/d;
  b:=(a1*c2-a2*c1)/d;
  Memo1.Lines.Add('a='+floattostr(a));
  Memo1.Lines.Add('b='+floattostr(b));
  end;

...
Рейтинг: 0 / 0
Как найти уравнение средней линии?
    #39730832
MBo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBo
Гость
sergeysg,
Метод наименьших квадратов работает. Вероятно, в реализации ошибка.
Например, почему
Код: pascal
1.
2.
3.
  for i:=   1
и 
 b2:=Length(x) -  1
...
Рейтинг: 0 / 0
Как найти уравнение средней линии?
    #39730849
sergeysg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, недоглядел. Точнее, на больших наборах данных он работал, только с небольшой погрешностью.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как найти уравнение средней линии?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]