close

Вход

Забыли?

вход по аккаунту

?

l.r. №2 выч методы

код для вставкиСкачать
Министерство образования и науки Украины
Севастопольский национальный технический университет
Кафедра технической кибернетики
ОТЧЁТ
По лабораторной работе №2
"Обращение матриц."
Выполнила: ст-ка гр. А-22д
Бинали А.С.
Проверил: ст.преподаватель
Захаров В.В.
Севастополь
2010
1 ЦЕЛЬ РАБОТЫ
Изучение и освоение методики обращения матрицы на основе численного метода ее LU-разложения.
Приобретение навыков разработки и применения подпрограмм, реализующих алгоритмы обращения матриц, вычисления определителей матриц на основе прямых методов.
2 ВАРИАНТ ЗАДАНИЯ
№ варA1x=b1A2x=b2A1b1A2b2
24,2 1,2 -1,7 -2 1 -4,1 1 2
2 1 -4 1
1 -2 -1,3 3,51,5 3 10
- 11 2 3 -5 1 1 2 3 2 7 1 5 4
5 9 4 70 3 1 8
3. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Обращение матриц
Как известно ,обратная матрица А-1 , по определению, является решением X матричного уравнения
A X = I ,(1)
где
I - единичная матрица размера n.
Представление в блочном виде матриц
X = [x1 x2 ... xn] и I = [e1 e2 ... en]
матричного уравнения позволяет перейти к эквивалентной (1) системе уравнений вида (2):
Axi = ei ,i = 1,2,...,n .(2)
Каждое i- тое уравнение системы (2) представляет собой СЛАУ вида (2) с одной и той же матрицей коэффициентов A, вектор правой части ei которой суть i- тый столбец единичной матрицы, а вектор решения xi - соответствующий i- тый столбец искомой обратной матрицы A-1. Таким образом решение задачи обращения матрицы A на основе эквивалентного представления (сводится к последовательному (в каком порядке не имеет значения) решению n СЛАУ системы (методом LU- разложения, при этом прямой ход метода LU- разложения (разложение матрицы A на треугольные сомножители) выполняется только один раз.
5 ЛИСТИНГ ПРОГРАММЫ
program lab2;
type rmatr=array[1..4,1..4] of real;
vector=array[1..4] of integer;
vector1=array[1..4] of real;
var
F, f1:text;
norm,norm1,cond,prov,eps,det:real;
r,a,a1,o:rmatr;
ip,jp:vector;
b,y:vector1;
q,i,k,n,j,p:integer;
ifsolve:boolean;
filename,s:string[20];
procedure DECOMP (n:integer; var a:rmatr; var ip:vector;var norm,eps,det:real; var ifsolve: boolean);
label 10;
var i,j,k,km,ipm,jpm:integer;
s,am:real;
begin
ifsolve:=true;
det:=1.0;
for i:=1 to n do
begin
ip[i]:=i;
jp[i]:=i
end;
norm:=0.0;
for i:=1 to n do
begin
s:=0.0;
for j:=1 to n do
s:=s+abs(a[i,j]);
if norm<s then norm:=s
end;
eps:=eps*norm;
for k:=1 to n-1 do
begin
am:=abs(a[k,k]);
ipm:=k;
jpm:=k;
for i:=k to n do
for j:=k to n do
if abs(a[i,j]) > am then
begin
am:=abs(a[i,j]);
ipm:=i;
jpm:=j
end;
if ipm<>k then
begin
det:=-det;
for j:=1 to n do
begin
am:=a[k,j];
a[k,j]:=a[ipm,j];
a[ipm,j]:=am
end;
km:=ip[k];
ip[k]:=ip[ipm];
ip[ipm]:=km
end;
if jpm<>k
then
begin
det:=-det;
for i:=1 to n do
begin
am:=a[i,k];
a[i,k]:=a[i,jpm];
a[i,jpm]:=am
end;
km:=jp[k];
jp[k]:=jp[jpm];
jp[jpm]:=km
end;
if abs(a[k,k]) >= eps then
for i:=k+1 to n do
begin
am:=a[i,k]/a[k,k];
a[i,k]:=am;
for j:=k+1 to n do
a[i,j]:=a[i,j]-am*a[k,j]
end
else
begin
ifsolve:=false;
goto 10
end;
end;
10: if (ifsolve and (abs(a[n,n]) >= eps)) then
begin
for k:=1 to n do
det:=det*a[k,k];
end
else
begin
det:=0.0;
ifsolve:=false
end
end;
Procedure SOLVE(n:integer;var a:rmatr;var ip,jp:vector;var b:vector1);
var
x,y:vector1;
i,j:integer;
s:real;
begin
for i:=1 to n do
y[i]:=b[ip[i]];
for i:=2 to n do
begin
s:=y[i];
for j:=1 to i-1 do
s:=s-a[i,j]*y[j];
y[i]:=s;
end;
x[n]:=y[n]/a[n,n];
for i:=n-1 downto 1 do
begin
s:=y[i];
for j:=i+1 to n do
s:=s-a[i,j]*x[j];
x[i]:=s/a[i,i];
end;
for j:=1 to n do
b[jp[j]]:=x[j];
x:=b;
end;
begin
write('Vvedite razmernoct matrici:');
readln(n);
writeln('Vvedite imya fayla s matricey:');
readln(filename);
assign(F, filename);
reset(F);
for i:=1 to n do
begin
for j:=1 to n do
begin
read(F, a[i,j])
end;
readln (F);
end;
close (F);
for i:=1 to n do
for j:=1 to n do
o[i,j]:=a[i,j];
for i:=1 to n do
begin
for j:=1 to n do
write(' a[',i,j,']=',a[i,j]:7:4);
writeln;
end;
write('Vvedite eps: eps= ');readln(eps);
decomp(n,a,ip,norm,eps,det,ifsolve);
if ifsolve=true then
begin
for i:=1 to n do
begin
for q:=1 to n do
b[q]:=0;
b[ip[i]]:=1;
SOLVE(n,a,ip,jp,b);
for j:=1 to n do
a1[j,i]:=b[j]
end;
norm1:=0.0;
for i:=1 to n do
begin
cond:=0.0;
for j:=1 to n do
cond:=cond+abs(a1[j,i]);
if norm1<cond then
norm1:=cond;
end;
cond:=norm*norm1;
for i:=1 to n do
begin
for j:=1 to n do
write(' ',a1[i,j]:7:4);
writeln
end;
writeln('Vvedite imya fayla dlya gotovix rezultatov');
readln(filename);
assign(f1, filename);
rewrite(f1); writeln(f1, 'Matrica L');
for i:=1 to n do
begin
for j:=1 to i-1 do
write(f1, a[i,j]:10:4);
write(f1, ' 1.0000');
for j:=i+1 to n do
write(f1, ' 0.0000');
writeln(f1);
end;
writeln(f1, 'Matrica U');
for i:=1 to n do
begin
for j:=1 to i-1 do
write(f1, ' 0.0000');
for j:=i to n do
write(f1, a[i,j]:10:4);
writeln(f1);
end;
for i:=1 to n do
for j:=1 to n do
Begin
prov:=0;
For k:=1 to n do
begin
prov:=prov+o[i,k]*a1[k,j];
r[i,j]:=prov;
end;
end; writeln(f1, 'Edenichnaya matrica');
for i:=1 to n do begin
for j:=1 to n do write(f1, ' ',r[i,j]:7:4);
writeln(f1);
end;
writeln(f1, 'Obratnaya matrica');
for i:=1 to n do
begin
for j:=1 to n do
write(f1, ' a1[',i,j,']=',a1[i,j]:7:4);
writeln(f1);
end;
writeln(f1,'norm=',norm);
writeln(f1, 'norm1=',norm1);
writeln(f1, 'cond(A)=',cond);
close(f1);
end else
begin
writeln;
writeln(' LU-razlogenie nevozmogno ');
end;
readln;
end.
6 PЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММЫ
1) для первой СЛАУ Matrica L
1.0000 0.0000 0.0000 0.0000
0.2381 1.0000 0.0000 0.0000
0.4762 -0.0977 1.0000 0.0000
0.2381 0.5212 0.5330 1.0000
Matrica U
4.2000 1.2000 -1.7000 -2.0000
0.0000 -4.3857 1.4048 2.4762
0.0000 0.0000 -3.0532 2.1944
0.0000 0.0000 0.0000 1.5161
Edenichnaya matrica
1.0000 0.0000 -0.0000 0.0000
0.0000 1.0000 0.0000 0.0000
0.0000 0.0000 1.0000 0.0000
-0.0000 0.0000 0.0000 1.0000
Obratnaya matrica
a1[11]= 0.3280 a1[12]=-0.1491 a1[13]=-0.2924 a1[14]= 0.3562
a1[21]= 0.1865 a1[22]=-0.5388 a1[23]=-0.3843 a1[24]= 0.5243
a1[31]= 0.2357 a1[32]=-0.3038 a1[33]=-0.5802 a1[34]= 0.4741
a1[41]= 0.1004 a1[42]=-0.3781 a1[43]=-0.3516 a1[44]= 0.6596
norm= 9.1000000000E+00
norm1= 2.0140973916E+00
cond(A)= 1.8328286264E+01
2) для второй СЛАУ 7.ВЫВОДЫ
В ходе лабораторной работы была написана программа, которая выполняет вычисление обратной матрицы для заданной матрицы с помощью метода LU-разложения со стратегией полного выбора ведущего элемента, а также вычисляет число обусловленности матрицы cond(A). Для матрицы А1 cond(A1)= 14.638; можно утверждать, что матрица А1 хорошо обусловлена. Так же в программу вставлена проверка, она выдает результат перемножения матрицы А и обратной ей. В матрице результат вышел с погрешностью, хоть метод и точный. Эта ошибка возникает из-за деления.
Документ
Категория
Рефераты
Просмотров
18
Размер файла
72 Кб
Теги
метод, выч
1/--страниц
Пожаловаться на содержимое документа