
Пример 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.. Суммирование (вычитание) матриц
C = A + B =
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, С);
Результат перемножения двух матриц располагается в массиве С.
Описание процедуры служит для определения процедуры в рамках текущей процедуры или программы. Выполнение процедуры начинается с оператора процедуры и после завершения процедуры выполнение программы продолжается с оператора, следующего непосредственно за оператором вызова процедуры.