Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LabRabotyOsen.doc
Скачиваний:
21
Добавлен:
01.05.2015
Размер:
382.46 Кб
Скачать

Лабораторная работа № 5 - Операции над матрицами. Использование процедур

Варианты матричных выражений:

0.

H=5AT+2(3YTY)-(2XTX)TBT

X(1,4)

Y(2,4)

1.

H=2YTX-4B(XTX)+A

X(5,2)

Y(5,1)

2.

H=2YTX(4XTX)-3A

X(4,3)

Y(4,1)

3.

H=5B+(2XTX)TXTY

X(4,2)

Y(4,1)

4.

H=(4XTX)TXT(XB+2Y)

X(6,2)

Y(6,1)

5.

H=2(XTX)TXTY-3A

X(5,2)

Y(5,1)

6.

H=2(XTX)TXTIX(XT4X)

X(4,2)

7.

H=(XTX)XT(YYT)X(XTX)

X(5,2)

Y(5,1)

8.

H=4B+5(XT2X)TXTY

X(4,3)

Y(4,1)

9.

H=2(XTX)TXTY-5A

X(5,2)

Y(5,1)

10.

H=(2XTX)XT(XB-3Y)

X(4,2)

Y(4,1)

11.

H=I-5X(4XTX)TX

X(6,1)

12.

H=5Y-2X(XTX)XTY

X(5,2)

Y(5,1)

13.

H=(3XXT)(4XXT)+2A

X(6,2)

14.

H=I-2X(XTX)XT+5A

X(6,2)

15.

H=(4XTX)TXT(XB+2Y)

X(4,3)

Y(4,1)

16.

H=B+(XTX)XTY-(XTX)TXTY

X(4,2)

Y(4,1)

17.

H=(XTX)XTXB+(XTX)XTY

X(5,2)

Y(5,1)

18.

H=4X(2XTX)TXT-I

X(5,2)

19.

H=4(XTAX)TXT2ATY

X(6,2)

Y(6,1)

20.

H=2YTY-5BTXTY-BTB

X(6,2)

Y(6,1)

21.

H=4BTB+YTY+YTX(4XTX)XY

X(4,2)

Y(4,1)

22.

H=3(XT2ATX)TXTATY

X(5,2)

Y(5,1)

23.

H=5(XTX)(2XTX)TXTY

X(6,2)

Y(6,1)

24.

H=2YTY-3YTX(XTX)XTY

X(4,4)

Y(4,1)

25.

H=(2Y-XB)TAT(Y-4XB)

X(5,3)

Y(5,1)

Примечание: Размерности матриц А, В и I подбираются самостоятельно, в зависимости от варианта.

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

1. Составляется структурная схема алгоритма;

2. Производится кодирование и отладка.

ОТЧЕТ ДОЛЖЕН СОДЕРЖАТЬ

1. Блок-схему программы;

2. Листинг программы на языке Паскаль;

3. Вывод программы на каждое арифметическое действие.

Пример программы

{Вариант 25}

Program Lab6;

Uses Crt;

Type

Matrix = Record

Mass:array[1..10, 1..10] of Integer;

line:Integer; {Количество строк в матрице}

column:Integer; {Количество столбцов в матрице}

End;

{ Процедура транспонирования матриц }

Procedure flip(var A:Matrix);

Var i,j:Integer;

Stakan:Integer;

Begin

For i:= 1 to A.line Do Begin

For j:= 1 to A.column Do Begin

if(i = j)Then continue;

Stakan:=A.Mass[i,j];

A.Mass[i,j]:=A.Mass[j,i];

A.Mass[j,i]:=Stakan;

End;

End;

Stakan:=A.column;A.column:=A.Line;A.Line:=Stakan;

End;

{ Процедура умножения матрицы на число}

Procedure multiplication(var A:Matrix;Mnoj:Integer);

Var i,j:Integer;

Begin

For i:=1 to A.line Do Begin

For j:=1 to A.column Do Begin

A.Mass[i,j]:=A.Mass[i,j]*Mnoj;

End;

End;

End;

{ Процедура перемножение матриц }

Procedure matrix_multiplication(A:Matrix;B:Matrix;

var Result:Matrix);

Var i,j,k:Integer;

Summa:Integer;

Begin

if( A.column <> B.line) Then

Begin

Writeln('В матрице А количество столбцов должно быть

количеству строк в матрице B');

Exit;

End;

Result.line:= A.line;

Result.column:= B.column;

For i:= 1 to A.line Do

For j:= 1 to B.column Do

Begin

Summa:=0;

For k:= 1 to A.column Do

Summa:=Summa+A.Mass[i,k]*B.Mass[k,j];

Result.Mass[i,j]:=Summa;

End;

End;

{ Процедура сложение матриц }

Procedure matrix_plus(A:Matrix;B:Matrix;var Result:Matrix);

Var i,j:Integer;

Begin

if( ( A.line <> B.line ) or ( A.column <> B.column ) )Then Begin

Writeln('Размерности матриц A и B должны совпадать');

Exit;

End;

Result.line:= A.line;

Result.column:= A.column;

For i:=1 to A.line Do

For j:=1 to B.column Do

Result.Mass[i,j]:= A.Mass[i,j]+B.Mass[i,j];

End;

{ Процедура вычитания матриц }

Procedure matrix_minus(A:Matrix;B:Matrix;var Result:Matrix);

Var i,j:Integer;

Begin

if( ( A.line <> B.line ) or ( A.column <> B.column ) )then Begin

Writeln('Размерности матриц A и B должны совпадать');

Exit;

End;

Result.line:= A.line;

Result.column:= A.column;

For i:=1 to A.line Do

For j:=1 to B.column Do

Result.Mass[i,j]:= A.Mass[i,j]-B.Mass[i,j];

End;

{ Процедура инициализации матриц }

Procedure Equalization(A:Matrix;var Result:Matrix);

Var i,j:Integer;

Begin

Result.line:= A.line;

Result.column:= A.column;

For i:=1 to A.line Do

For j:=1 to A.column Do

Result.Mass[i,j]:=A.Mass[i,j];

End;

{ Процедура вывода матриц }

Procedure Print(str:string;A:Matrix);

Var i,j:Integer;

Begin

ClrScr;

Write(str);

For i:=1 to A.Line Do

For j:=1 to A.column Do Begin

gotoxy(j*6, i+2);

Write( A.Mass[i,j] );

End;

Readkey;

End;

Var

X,Y,B,A:Matrix;

vs_pom, vs_pom2, vs_pom3:Matrix;

{ Инициализация элементом матриц и размерностей матриц }

Procedure Install;

Var i,j:Integer;

Begin

X.line:= 5; X.column:= 3;

Y.line:= 5; Y.column:= 1;

B.line:= 3; B.column:= 1;

A.line:= 5; A.column:= 5;

For i:=1 to X.line Do

For j:=1 to X.column Do

X.Mass[i,j]:=1;

For i:=1 to Y.line Do

For j:=1 to Y.column Do

Y.Mass[i,j]:=2;

For i:=1 to B.line Do

For j:=1 to B.column Do

B.Mass[i,j]:=3;

For i:=1 to A.line Do

For j:=1 to A.column Do

A.Mass[i,j]:=4;

End;

Begin

Install;

Equalization(Y, vs_pom);

multiplication(vs_pom, 2);

Print('2Y',vs_pom);

matrix_multiplication(X,B,vs_pom2);

Print('X*B',vs_pom2);

matrix_minus(vs_pom,vs_pom2,vs_pom3);

Print('2*Y - X*B',vs_pom3);

Flip(vs_pom3);

Print('(2*Y - X*B)T',vs_pom3);

Flip(A);

Print('A=',A);

matrix_multiplication(vs_pom3,A,vs_pom);

Print('(2*Y - X*B)T*At',vs_pom);

multiplication(vs_pom2, -4);

Print('-4XB',vs_pom2);

matrix_plus(Y,vs_pom2, vs_pom3);

Print('Y -4XB',vs_pom3);

matrix_multiplication(vs_pom,vs_pom3, vs_pom2);

Print('H = (2Y -XB)t*At*(Y -4XB)',vs_pom2);

End.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]