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

Пример 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, С);

Результат перемножения двух матриц располагается в массиве С.

Описание процедуры служит для определения процедуры в рамках текущей процедуры или программы. Выполнение процедуры начинается с оператора процедуры и после завершения процедуры выполнение программы продолжается с оператора, следующего непосредственно за оператором вызова процедуры.

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