Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа - Прямые методы решения СЛАУ

.doc
Скачиваний:
23
Добавлен:
02.05.2014
Размер:
145.41 Кб
Скачать

Науково-навчальний комплекс "Інститут прикладного системного аналізу"

при Національному технічному університеті України "КПІ"

Кафедра математичних методів системного аналізу

ЛАБОРАТОРНА РОБОТА №2

З курсу «ЧИСЕЛЬНІ МЕТОДИ»

Виконав: Студент 2-го курсу

Групи КА-65

Ільяшов В.О.

Прийняв: Заводник В.В.

Київ - 2008 р.

Тема: ПРЯМІ МЕТОДИ РОЗ'ЯЗАННЯ СИСТЕМ ЛІНІЙНИХ АЛГЕБРАЇЧНИХ РІВНЯНЬ (СЛАР)

1. Умова задачі:

1.Проаналізувати конкретну СЛАР та обгрунтувати обрання методу розв’язання.

2.Розвязати СЛАР з точністю e = 10-5 (максимальна координата вектору нев’язки).

3.Обчислити A-1 та det A.

А * x = b:   

  *  x  =  

Примітка:

Конец формы

2. Хід роботи:

1. Проаналізувати конкретну СЛАР та обгрунтувати обрання методу розв’язання. Реалізувати обраний метод у вигляді окремої процедури або методу відповідного об'єкту "СЛАР".

2. Розв’язати СЛАР з точністю e = 10-5 (максимальна координата вектору нев’язки).

3. Обчислити A-1 та det A.

4. Обгрунтування вибору методу.

5. Результати роботи:

- проміжні результати (від ітерації до ітерації);

- результати перевірки – вектор нев’язки r = b – Ax – у експоненціальній формі з принаймні шістьма значущими цифрами;

- A-1 та det A;

- A · A-1 – у експоненціальній формі з принаймні шістьма значущими цифрами.

3. Аналіз:

Оскільки система є несиметричною, то застосуємо метод Халецького. У програмі реалізовано цей метод, знайдено матриці L та D, розв’язок системи, детермінант, обернену матрицю і зроблено перевірку.

4.Результат роботи:

Файл Input.txt:

7.14 1 1.07 1.12 -0.96

1.2 3.28 1.3 -1.63 -1.08

0.87 -2.46 6.32 2.1 -0.617

1.36 0.16 2.1 5.22 10

1.44 0.42 0.883 -5 13

2.1 0.96 -2.15 2.76 -1.92

Файл Rez.txt:

Matruca A:

7.140000 1.000000 1.070000 1.120000 -0.960000

1.200000 3.280000 1.300000 -1.630000 -1.080000

0.870000 -2.460000 6.320000 2.100000 -0.617000

1.360000 0.160000 2.100000 5.220000 10.000000

1.440000 0.420000 0.883000 -5.000000 13.000000

Vector B:

2.100000

0.960000

-2.150000

2.760000

-1.920000

Matruca L:

7.140000 0.000000 0.000000 0.000000 0.000000

1.200000 3.280000 0.000000 0.000000 0.000000

0.870000 -2.460000 6.320000 0.000000 0.000000

1.360000 0.160000 2.100000 5.220000 0.000000

1.440000 0.420000 0.883000 -5.000000 13.000000

Matruca C:

1.000000 0.140056 0.149860 0.156863 -0.134454

0.000000 0.948760 0.341515 -0.554340 -0.280078

0.000000 0.000000 1.112302 0.094913 -0.188136

0.000000 0.000000 0.000000 0.937939 2.035010

0.000000 0.000000 0.000000 0.000000 1.819417

Vector Y:

0.294118

0.185079

-0.308637

0.570599

0.054174

Vector X:

0.200309

0.572290

-0.342139

0.460355

0.054174

Determinant:10043.914084

Vector nevazku:

0.00000000000000E+0000

9.61832588172911E-0002

3.12565460139012E-0001

1.69716381311446E-0001

-5.49183033825102E-0001

Zvorotna matruca:

0.149876 -0.054974 -0.009805 -0.022827 0.023606

-0.042352 0.268826 -0.067852 0.078163 -0.044173

-0.039315 0.114678 0.139276 0.000475 0.012895

0.002048 -0.011776 -0.022776 0.112267 -0.088319

-0.012509 -0.014761 -0.014940 0.043151 0.040891

A*A^-1:

9.99999999999091E-0001 -2.37636926331492E-0013 -9.43850032852911E-0014 1.84876602687869E-0013 3.48921907263478E-0014

-6.05957367006619E-0014 1.00000000000000E+0000 1.82397499881581E-0014 -8.55361076835658E-0014 1.00745875129728E-0013

-1.87217970370313E-0003 -1.30498993467681E-0012 9.99999999999091E-0001 -1.20087718320284E-0013 -1.02777705576350E-0013

9.53902324454248E-0005 -9.66684936543061E-0006 -1.13686837721616E-0013 9.99999999999091E-0001 0.00000000000000E+0000

-9.53737339625604E-0003 1.99431758368007E-0003 2.79568602650215E-0005 -3.97903932025656E-0013 9.99999999999091E-0001

5.Висновок:

Результатом розв’язання даної СЛАР є вектор

x = (0.200309 0.572290 -0.342139 0.460355 0.054174 ).

Отримані також значення визначника матриці: Determinant:10043.914084

та матриця, обернену до матриці системи А-1.

6. Текст програми

uses crt;

const n=5;

type ar=array[1..10,1..10] of real;

br=array[1..10] of real;

var t:text;

a,a1,od:ar;

b,x,e:br;

i,j,k:integer;

r:real;

procedure outa(a:ar; var t:text);

var i,j:integer;

begin

for i:=1 to n do

for j:=1 to n do

if j=n then writeln(t,a[i,j]:0:6,' ')

else write(t,a[i,j]:0:6,' ');

writeln(t,' ');

end;

procedure outb(b:br; var t:text);

var i:integer;

begin

for i:=1 to n do write(t,b[i]:0:6,' ');

writeln(t,' ');

writeln(t,' ');

end;

procedure host(a:ar; b:br; var t:text; var x:br; bool:boolean);

var i,j,k:integer;

l,c:ar;

y:br;

s,p:real;

begin

for i:=1 to n do

for j:=1 to n do

begin

if j=1 then l[i,j]:=a[i,j]

else

if i<j then l[i,j]:=0

else

begin

s:=0;

for k:=1 to j-1 do s:=s+l[i,k]*c[k,j];

l[i,j]:=a[i,j]-s;

end;

end;

for i:=1 to n do

for j:=1 to n do

begin

if i=1 then c[1,j]:=a[1,j]/l[1,1]

else

if i>j then c[i,j]:=0

else

begin

if i=j then c[i,i]:=1;

s:=0;

for k:=1 to i-1 do s:=s+l[i,k]*c[k,j];

c[i,j]:=(a[i,j]-s)/l[i,i];

end;

end;

for i:=1 to n do

begin

if i=1 then y[i]:=b[i]/l[1,1]

else

begin

s:=0;

for k:=1 to i-1 do s:=s+l[i,k]*y[k];

y[i]:=(b[i]-s)/l[i,i]

end;

end;

for i:=n downto 1 do

begin

if i=n then x[i]:=y[n]

else

begin

s:=0;

for k:=i+1 to n do s:=s+c[i,k]*x[k];

x[i]:=y[i]-s;

end;

end;

p:=1;

for i:=1 to n do p:=p*l[i,i];

if bool then

begin

writeln(t,'Matruca L:');

outa(l,t);

writeln(t,'Matruca C:');

outa(c,t);

writeln(t,'Vector Y:');

outb(y,t);

writeln(t,'Vector X:');

outb(x,t);

write(t,'Determinant:');

writeln(t,p:0:6);

writeln(t,' ');

end;

end;

procedure perev(a,a1:ar; b:br; x:br; var t:text);

var ne:br;

i,j:integer;

begin

for i:=1 to n do

begin

ne[i]:=0;

for j:=1 to n do ne[i]:=ne[i]+a[i,j]*x[j];

ne[i]:=b[i]-ne[i];

end;

writeln(t,'Vector nevazku:');

for i:=1 to n do write(t,ne[i],' ');

writeln(t,' ');

end;

Begin

clrscr;

assign(t,'input.txt');

reset(t);

for i:=1 to n do

for j:=1 to n do

if j=n then readln(t,a[i,j])

else read(t,a[i,j]);

for i:=1 to n do read(t,b[i]);

close(t);

assign(t,'rez.txt');

rewrite(t);

writeln(t,'Matruca A:');

outa(a,t);

writeln(t,'Vector B:');

outb(b,t);

host(a,b,t,x,true);

perev(a,a1,b,x,t);

for i:=1 to n do

begin

for j:=1 to n do

if i=j then e[j]:=1 else e[j]:=0;

host(a,e,t,x,false);

for j:=1 to n do a1[j,i]:=x[j];

end;

writeln(t,'Zvorotna matruca:');

outa(a1,t);

for i:=1 to n do

for j:=1 to n do

begin

r:=0;

for k:=1 to n do r:=r+a[i,k]*a1[k,j];

od[i,j]:=r

end;

writeln(t,'A*A-1:');

for i:=1 to n do

for j:=1 to n do

if j=n then writeln(t,od[i,j],' ')

else write(t,od[i,j],' ');

close(t);

End.

8