[c++] macierz symetryczna/odwrotna na tablicy wskaznikow

0

do tej pory zrobilem dodawanie,odejmowanie i mnozenie.
chcialbym dodac macierz symetryczna oraz macierz odwrotna
macierz ma byc kwadratowa, nie jest to z gory ustalone(jak w tym przypadku 3x3) powinna rowniez dzialac np 10x10
ma ktos pomysl jak sie do tego zabrac?
myslalem nad takim rozwiazaniem macierzy odwrotnej jak w 2 poscie tutaj:
[url]http://www.matematyka.pl/45016.htm[/url]
czy radzicie cos innego ?
czytelny kod//www.wklejto.pl/145468[/url]
lub w code:

#ifndef __matrix_h
#define __matrix_h
#include "vector.h"
 
struct sMatrix{
                 sVector*row;
                 int size;
};
 
sMatrix CreateMatrix(int size);
sMatrix dodawanie(sMatrix A, sMatrix B, int size);
sMatrix odejmowanie(sMatrix A, sMatrix B, int size);
sMatrix mnozenie(sMatrix A, sMatrix B, int size);
void showMatrix(sMatrix A,int size);
void delMatrix(sMatrix A);
#endif
 
#ifndef _Vector_H_
#define _Vector_H_
 
struct sVector{
                 float*col;
                 int size;
};
sVector create(int size);
 
#endif
 
/// matix.cpp
 
 
#include "matrix.h"
#include "vector.h"
#include <iostream>
using namespace std;
 
sMatrix CreateMatrix(int size){
                  sMatrix macierz;
                  macierz.size=size;
                  macierz.row=new sVector[size];
                  for(int i=0;i<size;i++){
                                         macierz.row[i]=create(size);
        }
                  return macierz;
}
 
sMatrix dodawanie(sMatrix A, sMatrix B, int size)
{
        sMatrix C;
        C=CreateMatrix(size);
        for(int i=0;i<size;i++){
                for(int j=0;j<size;j++){
                        C.row[i].col[j]=A.row[i].col[j]+B.row[i].col[j];
                }
        }
        return C;
}
 
sMatrix odejmowanie(sMatrix A, sMatrix B, int size)
{
        sMatrix C;
        C=CreateMatrix(size);
        for(int i=0;i<size;i++){
                for(int j=0;j<size;j++){
                        C.row[i].col[j]=A.row[i].col[j]-B.row[i].col[j];
                }
        }
        return C;
}
 
sMatrix mnozenie(sMatrix A, sMatrix B, int size){
                  sMatrix C;
        C=CreateMatrix(size);
        for(int j=0;j<size;j++){
                                 for(int i=0;i<size;i++){
                                                                C.row[i].col[j]=0;
                                        }
        }
                  for(int j=0;j<size;j++){
                                 for(int i=0;i<size;i++){
                                                                for(int k=0;k<size;k++){
                                                                                  C.row[i].col[j]+=A.row[i].col[k]*B.row[k].col[j];
                                  }
                                    }
                  }
                  return C;
}
 
 
void showMatrix(sMatrix A,int size){
        for(int i=0;i<size;i++){
                for(int j=0;j<size;j++){
                        cout<<A.row[i].col[j]<<" ";
                
                }
                cout<<endl;
        }
}
 
void delMatrix(sMatrix A){
        for(int i =0;i<A.size;i++)
                delete [] A.row[i].col;
        delete[] A.row;
}
 
 
//vector .cpp
 
 
#include "vector.h"
#include <cstdlib>
 
 
sVector create(int size){
 sVector wektor;
 wektor.size=size;
 wektor.col=new float[size];
 for(int i=0;i<size;i++) 
                        wektor.col[i]=rand()%21;
 return wektor;
}
 
 
/// main.cpp
 
 
#include <cstdlib>
#include <iostream>
#include "matrix.h"
#include <ctime>
using namespace std;
 
int main(){
         srand(time(NULL));
         sMatrix A,B,C;
         A=CreateMatrix(3);
         B=CreateMatrix(3);
         showMatrix(A,3);
         cout<<endl;
         showMatrix(B,3);
         cout<<endl<<"oto dwie losowe macierze(od 0 do 20) o wymiarach 3x3.\n";
                        while(1){
                                                cout<<" Wybierz 1 by je dodac, 2 by je od siebie odjac, 3 by je wymnozyc, 'x' aby wyjsc\n";
                                                char wybor=getchar();
                                                switch(wybor){
                                                                                  case '1':
                                                                                                 C=dodawanie(A,B,3);
                                                                                                 showMatrix(C,3);
                                                                                                 break;
                                                                                  case '2' :
                                                                                                 C=odejmowanie(A,B,3);
                                                                                                 showMatrix(C,3);
                                                                                                 break;
                                case '3' :
                                                                                                 C=mnozenie(A,B,3);
                                                                                                 showMatrix(C,3);
                                                                                                 break;
                                                              case 'x': case 'X':
                                                                                                 cout<<"koniec";
                                                                                                 delMatrix(A);
                                                                                                 delMatrix(B);
                                                                                                 delMatrix(C);
                                                                                                 return 1;
                                                             }
                                                 cin.ignore();                   
                                                 }
}
 
0

Do wygenerowania macierzy odwrotnej można użyć eliminacji gaussa
http://pl.wikipedia.org/wiki/Metoda_eliminacji_Gaussa

Pamiętaj, że na stackoverflow zapewne już kiedyś poruszył twój problem:
http://stackoverflow.com/questions/1148309/inverting-a-4x4-matrix

oraz odwracanie macierzy ala Intel(C) - jest tam gotowy kod :E
ftp://download.intel.com/design/PentiumIII/sml/24504301.pdf

1 użytkowników online, w tym zalogowanych: 0, gości: 1