Файл: Практикум по программированию задач матричного исчисления. Все задачи касаются выполнения определенных действий над матрицами.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 08.11.2023

Просмотров: 206

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Лабораторная работа №1Задание:Написать и отладить программу, выполняющую произведение двух матриц с комплексными коэффициентами, представленными в показательной форме записи (Ae).

Цель лабораторной работы

Получить навыки работы на персональной ЭВМ в среде программирования Quick Basic или Turbo Pascal, а также практикум по программированию задач матричного исчисления.Все задачи касаются выполнения определенных действий над матрицами. Примерный список задач:

  1. сложение матриц с комплексными коэффициентами;

  2. перемножение матриц с вещественными коэффициентами;

  3. перемножение матриц с комплексными коэффициентами;

  4. вычисление нормы матрицы;

  5. вычисление определителя матрицы;

  6. вычисление обратной матрицы;

  7. вычисление ранга матрицы;

  8. возведение матрицы в целую степень.

Краткие теоретические сведения, необходимые для решения поставленной задачи

Комплексные числа представляют собой расширение множества действительных чисел и являются суммой действительных и мнимых чисел. Мнимыми являются числа, квадрат которых отрицателен. Мнимая единица, квадрат которой дает –1, обозначается i или j. Соответственно, комплексное число Z можно представить как суммуZ = X + jY,где X = Re ­Z – действительня часть числа Z,Y = Im ­Z – мнимая часть числа Z.При этом Xи Y – действительные числа.Существует также показательная форма записи комплексного числаZ = Aej,где – модуль числа Z,φ – аргумент Z. В зависимости от знаков X и Y φ = arctg(Y/ X) или φ = arctg(Y/ X) + π.При этом X = Acos φ,Y = Asin φ.Как мнимая, так и действительная части комплексного числа могут быть равными нулю. В первом случае (X = 0) комплексное число вырождается в чисто мнимое, во втором (Y = 0) – в действительное.Матрица – математический объект, записываемый в виде прямоугольной таблицы элементов кольца или поля (например, целых, действительных или комплексных чисел), который представляет собой совокупность строк и столбцов, на пересечении которых находятся его элементы. Количество строк и столбцов задает размер матрицы.
Пусть имеются две матрицы A и B размерности nA × mA и nB × mB (n – число строк, m – число столбцов) и с элементами aij и bij. Произведением матриц A и B называется матрица C, элементы которой равныПри этом необходимо, чтобы mA = nB.

Блок-схема алгоритма программы

Блок-схемы алгоритма программы и ее подпрограмм приведены на рисунках 1–5.Рисунок 1 – Блок-схема алгоритма программыРисунок 2 – Блок-схема алгоритма подпрограммы умножения матриц с комплексными элементамиРисунок 3 – Блок-схема алгоритма подпрограммы сложения комплексных чиселРисунок 4 – Блок-схема алгоритма подпрограммы сложения комплексных чиселРисунок 5 – Блок-схема алгоритма подпрограммы вычисления арктангенса с учетом знаков катетов

Текст программы

Program Lab1;Type// Комплексное числоComplex = recordA, // модульphi: Real; // аргументend;// Матрица комплексных чиселMatrix = array[,] of Complex;// Арктангенс с учетом знаков сторон function ArcTan(x, y: Real): Real;beginif y = 0 then Result := 0else if x = 0 thenif y > 0 then Result := Pi/2else Result := -Pi/2else Result := ArcTan(y/x);if x < 0 thenif Result < 0 thenResult := Result + PielseResult := Result - Pi;end;// Сложение комплексных чиселfunction ComplexPlus(C1, C2: Complex): Complex;var x, y, x1, x2, y1, y2: Real;beginx1 := C1.A * cos(C1.phi);y1 := C1.A * sin(C1.phi);x2 := C2.A * cos(C2.phi);y2 := C2.A * sin(C2.phi);x := x1 + x2;y := y1 + y2;Result.A := sqrt(x*x + y*y);Result.phi := arctan(x, y);end;// Умножение комплексных чисел function ComplexMul(C1, C2: Complex): Complex;beginResult.A := C1.A * C2.A;Result.phi := C1.Phi + C2.Phi;end;// Умножение матрицfunction MatrixMul(M1, M2: Matrix): Matrix;var L, L1, L2: Integer;C: Complex;beginif (Length(M1, 1) <> Length(M2, 0)) then beginwriteln('Ошибка. Размерности матриц должны соответствовать.');

halt(1);end;L1 := Length(M1, 0);L2 := Length(M2, 1);L := Length(M2, 0);SetLength(Result, L1, L2);for var i: Integer := 0 to L1 - 1 dofor var j: Integer :=0 to L2 - 1 do beginResult[i, j].A := 0;Result[i, j].Phi := 0;for var k: Integer :=0 to L-1 do beginC := ComplexMul(M1[i, k], M2[k, j]);Result[i, j] := ComplexPlus(Result[i, j], C);end;end;end;// Представление комплексного числаfunction ComplexString(C: Complex; Len: Integer := 0): String;beginif C.A = 0 then Result := '0'else begin Result := C.A.ToString;if C.phi <> 0 then beginResult := Result + ' * exp(';if C.phi < 0 thenResult := Result + '-';Result := Result + 'j' + abs(C.phi).ToString + ')';end;end;while Length(Result) < Len do Result := ' ' + Result;end;// Вывод комплексного числаProcedure ComplexPrint(C: Complex; Len: Integer := 0);beginwrite(ComplexString(C, Len), #9#9);end;// Вывод матрицы комплексных чиселProcedure MatrixPrint(M: Matrix);var MaxLength: array of Integer;Cols, L: Integer;beginCols := Length(M, 1);SetLength(MaxLength, Cols);for var i: Integer := 0 to Cols - 1 do beginMaxLength[i] := 0;for var j: Integer := 0 to Length(M, 0) - 1 do beginL := Length(ComplexString(M[j, i]));if L > MaxLength[i] thenMaxLength[i] := L;end;end;for var i: Integer := 0 to Length(M, 0) - 1 do beginfor var j: Integer := 0 to Cols - 1 do beginComplexPrint(M[i, j], MaxLength[j]);Write(' ');end;writeln;end; end;// Ввод комплексного числаfunction ComplexRead: Complex;beginWrite('Введите модуль комплексного числа: ');Read(Result.A);Write('Введите аргумент комплексного числа: ');Read(Result.phi);end;// Ввод матрицы комплексных чиселfunction MatrixRead(L1, L2: Integer): Matrix;beginSetLength(Result, L1, L2);Writeln('Ввод матрицы ' + L1 + ' x ' + L2);for var i: Integer := 1 to L1 dofor var j: Integer := 1 to L2 do beginwriteln('Ввод элемента [', i, ', ', j, ']');Result[i-1, j-1] := ComplexRead;end;end;var M1, M2, M: Matrix;n1, n2: Integer;begin Writeln('Программа вычисления произведение двух матриц ' +'с комплексными коэффициентами,'); Writeln('представленными в показательной форме записи (A exp (j phi)).');Write('Введите число строк матрицы 1: ');Readln(n1);Write('Введите число столбцов матрицы 1: ');Readln(n2); M1 := MatrixRead(n1, n2);Writeln('Матрица M1:');MatrixPrint(M1);Write('Введите число строк матрицы 2: ');Readln(n1);if n1 <> n2 then beginwriteln('Ошибка. Размерности матриц должны соответствовать.');
halt(1);end;Write('Введите число столбцов матрицы 2: ');Readln(n2); M2 := MatrixRead(n1, n2);Writeln('Матрица M2:');MatrixPrint(M2);M := MatrixMul(M1, M2);Writeln('Матрица M = M1 * M2:');MatrixPrint(M); end.

Инструкция оператору

Программа предназначена для вычисления произведение двух матриц с комплексными коэффициентами, представленными в показательной форме записи (Ae).При запуске программа выдает сообщение «Программа вычисления произведение двух матриц с комплексными коэффициентами, представленными в показательной форме записи (A exp (j phi)).»По запросу необходимо ввести перемножаемые матрицы. После ввода каждой матрицы они выводятся на экран для контроля. Затем осуществляется вычисление матриц и вывод результата.Ввод матрицы осуществляется в следующем порядке.

  1. По запросу «Введите число строк матрицы N:» необходимо ввести число строк матрицы N, где N может быть 1 или 2.

  2. По запросу «Введите число столбцов матрицы N:» необходимо ввести число столбцов матрицы N, где N может быть 1 или 2.

  3. Далее в цикле по запросам вида «Ввод элемента [i, j]» (i, j номер строки и столбца, соответственно) осуществляется ввод комплексного элемента матрицы.
Ввод комплексного числа осуществляется в следующем порядке.

  1. По запросу «Введите модуль комплексного числа» вводится модуль числа.

  2. По запросу «Введите аргумент комплексного числа» вводится аргумент (мнимый показатель) числа.

Контрольный пример

На рисунке 6 показан скриншот расчета тестового примера. Видно, что результат расчета правильный.Рисунок 6 – Скриншот расчета тестового примера

Вывод

В ходе выполнения работы на языке программирования Pascal ABC написана и отлажена программа, выполняющая произведение двух матриц с комплексными коэффициентами, представленными в показательной форме записи (Ae). Приведены блок-схемы вычислительных алгоритмов программы, разработана инструкция оператору. Решение тестового задания подтвердило корректную работу программы.