1.2. ВыЧислительный алгоритм, процедуры и формальные параметры

Обращает на себя внимание наличие в фор­му­лах дляАиВконструкций ти­паи. Поэтому для вы­числения значений этих сумм сле­ду­ет заранее пре­ду­смот­реть процедуры-функции:

function sumX (n,k:integer; x: mas1) : real;

var ss : real; i : integer;

begin

ss := 0.0;

for i := 1 to n do

case k of

1: ss := ss+x[i];

2: ss := ss + sqr(x[i]);

end;

sumX := ss;

end.

Формальные параметры процедуры. Входные:N(типin­teger) - общее число точек, ко­то­рые суммируем;К(типinteger) - параметр, оп­ре­­де­ля­ю­щий тип сум­ми­ро­ва­ния: К= 1 - сум­ми­ру­ем первые степенихi;К= 2 - сум­­ми­ру­ем квад­ра­ты чиселхi.Выходной:про­цедура воз­вра­щает число (типreal), равное ис­ко­мой сум­ме.

function sumXY (n,k:integer; x,y: mas1) : real;

var ss : real; i : integer;

begin

ss := 0.0;

for i := 1 to n do

ss := ss+x[i]*y[i];

sumXY := ss;

end.

Формальные параметры процедуры. Входные:N(типin­­teger) - общее чис­ло точек, ко­то­рые суммируем;К(типinteger) - параметр, оп­ре­де­­ля­ющий тип сум­ми­ро­ва­ния:К= 1 - суммируем про­изведение первых сте­­пе­нейхiнауi.Выходной:процедура возвращает чис­­ло (типreal), равное искомой сумме.

В параграфах этой главы предложенные процедуры бу­дут мо­­ди­фи­цироваться за счет вклю­чения в оператор САSЕ но­вых вариантов конструкций сумм.

Теперь, используя предложенные процедуры-фун­­к­­ции, можно определить про­цедуры, вы­пол­ня­ю­щие вы­чис­ления неизвестных параметров АиВ. За­­ме­тим, что все вычисления можно было бы свес­ти к одной проце­дуре, но для яс­нос­ти изложения бы­ло решено составить для каждого варианта вы­чис­ления свою.

Метод выбранных точек приВ = 0 настолько прост, что вы­чис­ли­тель­ная процедура не со­став­ля­ет­ся.

Метод средних и метод наименьших квад­ра­тов. Pа­бо­той фун­кции управляет па­ра­метрК,который приК = 1 вызывает определениеАме­­тодом средних, а приК = 2 - методом наименьших квад­ратов.

function a (n : integer; x,y : mas1; k : integer) : real;

var s : real;

begin

case k of

1: s := sumX (N,1,Y) / sumX (N,1,X);

2: s := sumXY(N,1,X,Y) / sumX (N,2,X);

end;

a := s;

end.

{ **** Метод выбранных точек для А ¹ 0; В ¹ 0*** }

pocedure ab1 (x1,y1,x2,y2 : real; var a,b : real;

var k : integer);

begin

if abs(x2-x1)<1.0e-10 then

begin

k := 1;

exit;

end;

a := (y2-y1) / (x2-x1);

b := -a*x1 + y1; k := 0;

end.

{ **** Метод средних для А 0; В 0 **** }

procedure ab2 (n:integer; x,y:mas1;

var a,b : real);

var x1,y1:mas1; l,i : integer; s1, s2, s3, s4 : real;

begin l := n div 2;

for i := l+1 to n do

begin x1[i-l] := x[i]; y1[i-l] := y[i];

end;

s1 := sumX (l,1,y);

s2 := sumX (n-l,1,y1);

s3 := sumX (l,1,x);

s4 := sumX (n-l,1,x1);

a := (l*s2 - (n-l)*s1) / (l*s4 + (n-l)*s3);

b := s1/l - a*s3 /l;

end.

{****Метод наименьших квадратов для А 0; В 0 ****}

procedure ab3 (n:integer; x,y:mas1;

var a,b:real);

var s1, s2,s3, s4 : real;

begin

s1 := sumX(n,1,x);

s2 := sumX (n,1,y);

s3 := sumXY(n,1,x,y);

s4 := sumX(n,2,x);

a := (n*s3 - s1*s2) / (n*s4- s1*s1);

b := (s2 - a*s1) / n;

end.

Соседние файлы в папке GLAVA7