Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПОСІБНИК МКМ 2009.doc
Скачиваний:
18
Добавлен:
25.04.2019
Размер:
1.94 Mб
Скачать

I,n: integer;

e : real;

a : ar1;

x :ar2;

PROCEDURE linequ (a : ar1; n : Integer; e : Real; VAR x :ar2);

{ заголовок процедури та опис локальних змiнних;}

label 1;

Var I,j,k: Integer;

y,w: Real;

BEGIN

FOR i:=1 TO n DO

{приведення матрицi системи (1) до трикутного виду (3)}

BEGIN

k:= i; y := a[i,i];

FOR j:= i+1 TO n DO

BEGIN w := a [j,i];

IF Abs (w) > Abs(y) THEN BEGIN k := j; y := w END

END;

IF Abs (y) <e THEN BEGIN Write ('НЕ ВИЗНАЧЕНО'); goto 1 END;

FOR j := i TO n+1 DO

BEGIN w := a[k,j]; a[k,j]:= a [i,j]; a[i,j] := w/y END;

FOR k := i+1 TO n DO

FOR j :=n+1 DOWNTO i+1 DO a[k,j] := a[k,j]-a[i,j]*a[k,i]

END;

FOR i := n DOWNTO 1 DO {Зворотний хд метода Гаусса}

BEGIN w := 0;

FOR j := i+1 TO n DO w := w+a[i,j]*x[j];

x[i] := a[i,n+1]-w

END;

1:

END{ linequ };

BEGIN{}

{Контрольний варiант 1}

n:= 4;{ - кiлькiсть рiвнянь i невiдомих}

e:= 0.0001;{ - точнiсть обчислень}

{а- коефiцiєнти розширеної матрицi системи;}

a[1,1]:=-2;a[1,2]:=3;a[1,3]:=4;a[1,4]:=1;a[1,5]:=6;

a[2,1]:=1; a[2,2]:=2; a[2,3]:=1;a[2,4]:=3;a[2,5]:=7;

a[3,1]:=-4;a[3,2]:=4; a[3,3]:=2 ;a[3,4]:=2;a[3,5]:=4;

a[4,1]:=1; a[4,2]:=2; a[4,3]:=-3;a[4,4]:=0;a[4,5]:=0;

linequ (a,n,e,x);{Звернення до процедури}

for i:=1 to 4 do

writeln(' Вiдповiдь x',i:1,'=',x[i]:2:6);

writeln('Press Enter');

readln;

END.

Приклад Д4. АПРОКСИМАЦІЯ ФУНКЦІЇ ПОЛІНОМОМ МЕТОДОМ НАЙМЕНШИХ КВАДРАТІВ

Нехай у вузлах хі задано значення уі, деякої функції у = f(x), i = 0, n, причому вузли хі можуть бути кратними. Методом найменших квадратів полягає у відшуканні серед поліномів m-го степеня,

(9)

такого, для якого вираз

(10)

набуває мінімального значення.

Як випливає з рівності (10) функція S(Pm) невід’ємна, отже icнye її мінімум. Застосовуючи необхідну умову мінімуму функції S(Pm), як функції від коефіцієнтів ai,

(11)

дістаємо систему лінійних алгебраїчних рівнянь з невідомими аі:

(12)

Введемо позначення Тоді система (12) матиме вигляд матричного рівняння

Са= d,

де

(13)

Середньоквадратична похибка апроксимації визначається за формулою:

(14)

Лістінг програмного коду

{У наступнiй програмi система (13) розв'язується методом Гауса.

У програмi використовуються змiннi: n - кiлькiсть вузлiв рiвна n+1;

m - степiнь шуканого полiнома; a[0:m] - масив коефiцiєнтiв шуканого полiнома;

х, у, - масиви вузлiв i значень функцiї;

t - середньоквадратична похибка апроксимацiї; u - робоча змiнна;

i, j, - змiннi циклiв; с - розширена матриця С в (13).

КОНТРОЛЬНИЙ ПРИКЛАД.

При n=5 у вузлах хi= (0, 1, ,2, 3, 4, 5) задано значення функцiї

уi=(2, 3, 7, 10, 18, 26).

Відповідь коефiцiєнтами апроксимуючого полiнома четвертого степеня (m=4) є а0= 1.916667:., а1 = 1.222222:, а2 = 0.062500:,

а3 = 0.236111:, а4 = -0.020833:,

Похибка t = 0.540062.}

Program APROX;

CONST dim = 20;

TYPE ar2 = ARRAY [0..dim+1] OF Real;

Var

I,m,n : integer;

t : real;

a,x,y :ar2;

PROCEDURE apr(m,n: Integer; x, y: ar2; VAR t: Real; VAR a: ar2);

{ заголовок процедури та опис локальних змiнних;}

TYPE ar1 = ARRAY [1..dim,1..dim+1] OF Real;

PROCEDURE linequ (a : ar1; n : Integer; e : Real; VAR x :ar2);

{ заголовок внутрішньоїпроцедури та опис локальних змiнних;}

{Процедура GAUSS. Розв'язування системи лiнiйних рiвнянь методом Гаусса Дивись додаток Д3

label 1;