Вычисление матричных выражений при помощи среды программирования Turbo Pascal 7.0 с использованием подпрограмм процедур, страница 3

3.Анализ матричного выражения

Заданное матричное выражение :

 

         Матрица A имеет три строчки и два столбца, т.е. размер матрицы можно записать в виде 2*3 , где первое число в выражении  указывает на число строк , а второе на число столбцов. Матрица  B состоит из двух строк и трех столбцов , т.е. ее размер 2*3. Матрица C представлена двумя строками и четырьмя столбцами, т.е. размер этой матрицы 2*4.

Первой операцией является разность двух матриц . В  данном примере матрицы A и B имеют разные размеры, поэтому матрицу B следует транспонировать и получится матрица равная матрице D1 , тогда первую операцию возможно выполнить. Получится матрица размерностью 3*2.

Следующим действием является умножение матрицы D2 получившейся из разницы матриц  и,на матрицу D3. Т.к. число столбцов матрицы   D3 равно числу строк матрицы C, то произведение  D3* C возможно.

Таким образом, матричное выражение можно вычислить. В результате получится  матрица с тремя строками и четырьмя  столбцами, т.е. размер этой матрицы 3*4.   

4.Контрольный тест.

   Для проверки правильности  результатов берутся расчеты заданного матричного выражения из Excel.

5.Программа с процедурами.

Program RGZ;

 uses crt;

 type

  mas=array[1..10,1..10] of real;

 var

  ma,mb,mc,na,nb,nc,i,k:integer;

  z:real;

  a,b,c,bt,atb,d:mas;

  f:text;

 Procedure mout(p:mas;m,n:integer);

  {подпрограмма процедура mout для вывода на экран матрицы}

    var                                {описание переменных процедуры}

     i,j:integer;

   begin                               {начало раздела операторов процедуры}

     for i:=1 to m do

      begin

        for j:=1 to n do write(p[i,j]:5:2,'   ');

       writeln;

      end;

    end;                               {конец процедуры mout}

Procedure tr(p:mas; m,n:integer; var q:mas);

  {подпрограмма процедура tr для транспонирования матрицы}

    var                                {описание переменных процедуры}

     i,j:integer;

   begin                               {начало раздела операторов процедуры}

     for i:=1 to m do

       for j:=1 to n do q[j,i]:=p[i,j]

end;                                {конец процедуры tr}

  Procedure mult(p,q:mas; m,n,l:integer; var r:mas);

   {подпрограмма процедура mult для перемножения матриц}

    var                                {описание переменных процедуры}

     i,j,k:integer;

     sum:real;

 begin                               {начало раздела операторов процедуры}

     for i:=1 to m do

      for j:=1 to n do

       begin

         sum:=0;

         for k:=1 to l do sum:=sum+p[i,k]*q[k,j];

         r[i,j]:=sum;  {присваивание суммы элементу матрицы В}

end

   end;         {конец процедуры mult}

 Procedure minus(p,q:mas;m,n:integer;var r:mas);

    var

     i,k:integer;

    begin

     for i:=1 to m do

      for k:=1 to n do r[i,k]:=p[i,k]-q[i,k];

 end;

 begin

  assign(f,'eist.rgz');

  reset(f);

  read(f,ma,na);