
- •«Дальневосточный федеральный университет»
- •Содержание отчета
- •Лабораторная работа №1 - Использование логических выражений для определения границ фигур на плоскости
- •Пример программы
- •Лабораторная работа № 2 - Табуляция функций
- •Пример программы
- •Лабораторная работа № 3 - Суммирование членов ряда
- •Пример программы
- •Лабораторная работа № 4 - Обработка элементов матрицы
- •Пример программы
- •Лабораторная работа № 5 - Операции над матрицами. Использование процедур
- •Пример программы
- •Лабораторная работа № 6 -Методы сортировки
Лабораторная работа № 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.