Zadatak:Racunanje Inverzne matrice

C++ Program za izracunavanje Inverzne matrice matrici dimenzija 3×3.

#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;

int main (){
 int matricaA[3][3],matricaAT[3][3],kofaktor[3][3];
 int sp_d,gl_d,D; 

            for(int i=0;i<3;i++)
            {
            	for(int j=0;j<3;j++)
              {
		cout<<"matrica ("<<i+1<<","<<j+1<<"): ";                                                                                            cin>>matricaA[i][j];
              }
            }
    //racunanje determinante
gl_d=(matricaA[0][0]*matricaA[1][1]*matricaA[2][2])
 +(matricaA[0][1]*matricaA[1][2]*matricaA[2][0])
 +(matricaA[0][2]*matricaA[1][0]*matricaA[2][1]);
sp_d=(matricaA[0][2]*matricaA[1][1]*matricaA[2][0])
 +(matricaA[0][0]*matricaA[1][2]*matricaA[2][1])
 +(matricaA[0][1]*matricaA[1][0]*matricaA[2][2]);
   D=glavna_d-sporedna_d;
   //ako je D=0,nema smisla traziti inverz
if(D!=0)
{
   //transponovanje
   for(int i=0;i<3;i++)
   {
   	for(int j=0;j<3;j++)
   	{
   		matricaAT[j][i]=matricaA[i][j];
   	}
   }
   //racunanje kofaktora
	kof[0][0]=(matricaAT[1][1]*matricaAT[2][2])
-(matricaAT[1][2]*matricaAT[2][1]);

    kof[0][1]=((matricaAT[1][0]*matricaAT[2][2])
-(matricaAT[1][2]*matricaAT[2][0]))*(-1);

    kof[0][2]=(matricaAT[1][0]*matricaAT[2][1])
-(matricaAT[1][1]*matricaAT[2][0]);

    kof[1][0]=((matricaAT[0][1]*matricaAT[2][2])
-(matricaAT[0][2]*matricaAT[2][1]))*(-1);

    kof[1][1]=(matricaAT[0][0]*matricaAT[2][2])
-(matricaAT[0][2]*matricaAT[2][0]);

    kof[1][2]=((matricaAT[0][0]*matricaAT[2][1]
-matricaAT[0][1]*matricaAT[2][0]))*(-1);

    kof[2][0]=(matricaAT[0][1]*matricaAT[1][2]
-matricaAT[0][2]*matricaAT[1][1]);

    kof[2][1]=((matricaAT[0][0]*matricaAT[1][2]
-matricaAT[1][0]*matricaAT[1][2]))*(-1);

    kof[2][2]=(matricaAT[0][0]*matricaAT[1][1]
-matricaAT[0][1]*matricaAT[1][0]);

    cout<<"Inverzna matrica: "<<endl;
    cout<<"1/"<<D<<" * "<<endl;
for(int i=0;i<3;i++)
{   if(i!=0)
    {cout<<endl;}
 for(int j=0;j<3;j++)     		  {  //samo radi ljepseg izgleda ispisa imamo if                             if(kof[i][j]>=0)
         {cout<<" "<<kofaktor[i][j]<<" ";}
       else
         {cout<<kofaktor[i][j]<<" ";}
 }
}
}
else
  {cout<<"Determinanta je 0.
Ne mogu izracunati inverz matrice!";}
   cout<<endl;
   system("pause");
   return 0;
}

[/code]

Kao sto se vidi iz primjera zbog teh razloga inv. matrica nije mnozena faktorom 1/det(M)
(u programiranju nema razlomaka vec samo decimalni)
ali se moze primjetiti da je u biti zadatak izvrsen.
Isto tako ako je det(M)=0,nema smisla traziti inverznu matricu.
I taj slucaj je predvidjen.

Pozdrav!

Komentariši