Умножение на матрици - алгоритъм и програма

Нека имаме две правоъгълни матрици, над които трябва да се извърши операцията умножение на матрици. Умножението на матрици A и B е дефинирано само когато A е съгласувана с B, т.е. когато броя на стълбове на A е равен на броя на редове на B. Най-често срещаното умножение на две натрици е умножение ред по стълб. Ако за произведение от две числа важи правилото за комутативност a*b = b*a, то при умножение на две матрици A и B тяхното произведение не е комутативно , т.е. A*B<>B*A. Тук се разглежда само един алгоритъм за умножение на две матрици. Произведението от началните две матрици A и B е нова матрица C. Всеки елемент от ред на матрица A се умножава последователно с всеки елемент от стълбовете на матрица B. Сумата на всяко от тези произведения дава един елемент от реда на матрица C с номер, съвпадащ с този на матрица A. Елементите от първия ред на A, умножен с всички стълбове на B, дава всички елементи от първия ред на матрица C и т.н.

 
     Следващата примерна програма илюстрира решена задача за умножение на матрици:
 
#include <iostream>

using namespace std;

//obs-br=3 - pyrwata matrica e s 4 reda 3 koloni, a wtorata s 3 reda 2 koloni


int main()

{   int const obs_br=3, br_red=4, br_kol=2, razmer=10;


//razmerite za broj redowe i koloni sa deklarirani kato konstanti

//wywevdane stojnost na element move da se osyshestwi:

//a) pri deklarirane; b) da se wywevdat ot klawiaturata; c) kato sluchajni chisla            

 

    int mas1[br_red][obs_br] = { {1,7,4}, {0,9,4}, {8,8,2}, {4,5,5} };

    int mas2[obs_br][br_kol] = {{1,7},{1,1},{5,2}};

    int mas3[br_red][br_kol];

    int i,j,k, proiz;

  cout<<"Imate dwe matrici s razmeri [4][3] i [3][2], sydyrvashi estestweni\n";


   cout<<"chisla ot interwala [0..9]. Da se systawi programa, chez koqto se\n";

   cout<<"wywevdat stojnosti na elementi w dwete matrici i se izwevda\n";

  cout<<"rezlultata ot tqhnoto proizwedenie.\n";

 


//inicializirane na nowiq dwumeren masiw ( matrica) - wseki element e 0    

 for( i = 0; i < br_red; i++) 


 { for( j = 0; j < br_kol; j++) { mas3[i][j]=0; }  

 }//for i

    

//Priswoqwane/wywevdane i pechat stojnosti za matrica  1

 cout<<("Stojnosti w matrica 1: \n");


 for( i = 0; i < br_red; i++) 

 {for( j = 0; j < obs_br; j++) 

 {//cout<<"Wywedete stojnost za element ["<<i<<"]["<<j<<"]: ";cin>>mas1[i][j];


 mas1[i][j]=rand()%razmer;// sluchajni chisla ot interwala za element na matrica 

 cout<<" "<<mas1[i][j];} //izwevda stojnostta za wseki otdelen element

 cout<<endl;

}  //for i

       

//Priswoqwane/wywevdane i pechat stojnosti za matrica 2       


 cout<<("Stojnosti w matrica 2: \n");

for( i = 0; i < obs_br; i++) 

 {for( j = 0; j < br_kol; j++) 

{ //cout<<"Wywedete stojnost za element ["<<i<<"]["<<j<<"]: ";cin>>mas2[i][j];


 mas2[i][j]=rand()%razmer;//sluchajni chisla ot interwala    

  cout<<" "<<mas2[i][j];}  //izwevda stojnostta za wseki otdelen element

  cout<<endl;

}//for i


    

//umnovenie na 2-te matrici red po stylb  


 for( i = 0; i < br_red; i++) 

{for( j = 0; j < br_kol; j++) 

{cout<<"mas3["<<i<<"]["<<j<<"] = ";


 for( k = 0; k < obs_br; k++) 

  //proizwedenie e suma ot proizwedeniqta red * stylb na 2-te matrici 

{proiz=mas1[i][k]*mas2[k][j];

cout<<" + "<<proiz;//izwevda otdelnite proizwedeniq

 mas3[i][j] += proiz;//natrupwa sumata ot proizwedeniq za element na matrica 

 }//for k


 cout<<" = "<< mas3[i][j]<<endl;

  }//for j  

 }//for i


 cout<<("Rezultat ot umnovenie na dwete matrici e matrica 3: \n");


 for( i = 0; i < br_red; i++) 

{ for( j = 0; j < br_kol; j++) { cout<<" "<<mas3[i][j]; }  

 cout<<endl;//preminawane na now red

}//for i



  system("pause");

  return 0;  

} // kraj na programa umnovenie na matrici 

 

Обяснени и решени задачи с подобни алгоритми, функции и служебни думи са разгледани в страницата с електронни уроци по информатика - програмиране.
Илюстриране работата на характерни алгоритми можете да намерите в предоставените електронни помагала съдържащи решени задачи, примери.

Начало на страницата

 
Размер на шрифта
Increase Font Size Option 3 Reset Font Size Option 3 Decrease Font Size Option 3
Bulgarian Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish
Търсене в сайта: