Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Метод наименьших квадратов


Автор: Axenia 22.5.2013, 22:27

Помогите, пожалуйста. Почему дают Error код Delphi для Метод наименьших квадратов

Код

Procedure RegresieLiniara(x, y: array of extended;var a1, b: extended);
var n, i: integer;
    Sx, Sxy, Sy, Sxx: extended;

begin
  n := length(x);
  Sx := 0; Sxy := 0; Sy := 0; Sxx := 0;

  for i:=0 to n-1 do
  begin
   Sx := Sx + x[i];
   Sxy := Sxy + (x[i] * y[i]);
  Sy := Sy + y[i];
  Sxx := Sxx + (x[i] * x[i]);
  end;

  a1:=((n * Sxy) - (Sx * Sy))/((n * Sxx) - (Sx * Sx));
  b :=((Sxx * Sy) - (Sx * Sxy))/((n * Sxx) - (Sx * Sx));

 end;



M
Poseidon
При вставке фрагмента кода пользуйтесь кнопкой "Код"

Автор: northener 23.5.2013, 01:26
Цитата(Axenia @  22.5.2013,  22:27 Найти цитируемый пост)
Почему дают Error код Delphi для Метод наименьших квадратов

А где вы взяли сей код? И правильно ли вы его скопировали?

Автор: Axenia 23.5.2013, 06:28
из теория http://ru.scribd.com/doc/96403336/metode

Автор: northener 24.5.2013, 01:39
Цитата(Axenia @  23.5.2013,  06:28 Найти цитируемый пост)
из теория http://ru.scribd.com/doc/96403336/metode 

Лень было искать в "той теория" решение МНК для линейной функции.
Так что либо в "той теория" ошибки, либо вы неправильно что-то поняли.

Вот система двух уравнений для линейной функции (Даю уравнения с использованием ваших имен переменных):
Код

  Sxy = a1 * Sxx + b * Sx
  Sy = a1 * Sx + n * b 

Надеюсь решать систему двух уравнений вы умеете?

Автор: david_yu 24.5.2013, 12:12
Код

Procedure RegresieLiniara(x, y: array of extended;var a1, b: extended);
var 
  iLow, iHigh, i, nx, ny: integer;
  Sx, Sxy, Sy, Sxx: extended;
begin
  nx := Length(x);
  ny := Length(y);
  
  if nx <> ny then begin
    a1 := 0;
    b := 0;
    Exit;
  end;
  
  iLow := Low(x);
  iHigh := High(x);
  
  Sx := 0; 
  Sxy := 0; 
  Sy := 0; 
  Sxx := 0;
     
  for i:= iLow to iHigh do begin
    Sx := Sx + x[i];
    Sxy := Sxy + (x[i] * y[i]);
    Sy := Sy + y[i];
    Sxx := Sxx + (x[i] * x[i]);
  end;
  
  if (Sxx = 0) xor (Sx = 0) then begin
   a1 := ((n * Sxy) - (Sx * Sy))/((n * Sxx) - (Sx * Sx));
   b  := ((Sxx * Sy) - (Sx * Sxy))/((n * Sxx) - (Sx * Sx));
  end;
end;


Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id519d1cc16ccc19ad6a000002#findElement_E7045_519f2ef66ccc193e6e001019_0


 ! 
Poseidon
Используйте кнопку "Код"! На новом Винграде она тоже есть.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)