Пример 7
Дана матрица A = { } , i, j=1, 2, ..., N.
Необходимо вычислить элементы вектора X = { }, i=1, 2, ... , N. Каждый элемент вектора вычисляется как произведение i-го столбца и главной диагонали матрицы A.
Например, пусть N = 3 и известны все элементы матрицы A
A = = .
Попутно отметим, что i-ая строка, j-ый столбец, главная и побочная диагонали матрицы A по сути является вектором.
Действительно,
- 2-ая строка (вектор),
- 3-ий столбец (вектор),
{ }N - главная диагональ (вектор),
{ }N - побочная диагональ (вектор).
В соответствии с условием задачи (пример 6), элементы вектора xi могут быть рассчитаны следующим образом:
для = * + * + * = ;
для = ;
для .
Формализация данной задачи приводит к следующему выражению:
, i = 1, 2, . . . , N ( 8 )
Два варианта разработки алгоритма данной задачи показаны на рис. 13.
Рис.13
……..
Type vect=array [1..10] of real;
Matr= array [1..10,1..10] of real;
Procedure Vector_x(n:integer; a:matr; var x:vect);
Var i,j:integer; s:real;
Begin
For i:=1 to n do
Begin
S:=0;
For j:=1 to n do
S:=S+a[i,j]*a[j,j];
X:=S;
End;
End;
Пример 8.. Суммирование (вычитание) матриц
Данные действия над двумя матрицами A и B могут быть произведены, если размерности обоих матриц равны, предположим (M*N). Результатом суммирования (вычитания) будет матрица C такой же размерности (M*N). C = A + B = + = , ( 9 ) , i = 1, 2, . . . ,M; j = 1, 2, . . . , N. ( 10 ) |
Рис. 14 |
Алгоритм суммирования матриц показан на рис. 14.
Алгоритм вычитания матриц аналогичен рассмотренному, за исключением очевидной замены знака " + " на " - ".
Пример 9. Составить подпрограмму умножения двух квадратных матриц С=А*В m-го порядка.
Type Matr = array [1..10, 1..10] of real;
Var A, B, C : Matr;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Procedure MultMat (n: integer; Mat1, Mat2:Matr; Var Mat3:Matr);
var i.k,j : integer;
begin
for i:=1 to n do
for j:=1 to n do begin
Mat3[i,j]:=0.0;
for k:=l to n do
Mat3[i,j]:=Mat3[i,j]+Mat1[i.k]*Маt2[k,j];
end;
end;
Здесь массивы Mat1 и Mat2 в ходе выполнения процедуры не меняют своих значений, поэтому для них указывается только тип. Массив Mat3 формируется в процедуре, соответственно при описании его типа перед именем ставится ключевое слово Var. Переменные i, j, k задействованы только внутри процедуры, поэтому они описаны как локальные переменные.
Вызов процедуры осуществляется по имени, с указанием фактических параметров. Так, для рассматриваемого примера обращение к процедуре может выглядеть так:
MultMat (m. A, B, С);
Результат перемножения двух матриц располагается в массиве С.
Описание процедуры служит для определения процедуры в рамках текущей процедуры или программы. Выполнение процедуры начинается с оператора процедуры и после завершения процедуры выполнение программы продолжается с оператора, следующего непосредственно за оператором вызова процедуры.