//Déclaration de l'opération * entre les matrices Matrice operator*(Matrice A, Matrice B) { int nlA, ncA, nlB, ncB; A.GetSize(nlA, ncA); B.GetSize(nlB, ncB); Matrice result(nlA, ncB); if(ncA!=nlB) // On ne peut pas multiplier n'importe quelles matrices { cout << "* Impossible" << endl; return result; } else { double** m = new double*[nlA]; for(int i=0; i<nlA ; i++) { m[i] = new double[ncB]; for (int j=0; j<ncB; j++) m[i][j] = 0; } for(int i=0; i<nlA ; i++) for(int j=0; j<ncB ; j++) for(int k=0; k<ncA ; k++){ m[i][j]+=(A.GetValue(i,k))*(B.GetValue(k,j));} result.Set(m); return result; } }
Matrice operator-(Matrice A, Matrice B) { int nlA, ncA, nlB, ncB; A.GetSize(nlA, ncA); B.GetSize(nlB, ncB); Matrice result(nlA, ncB); if(ncA!=ncB || nlA!=nlB) { cout << "- Impossible" << endl; return result; } else { double** m = new double*[nlA]; for(int i=0; i<nlA ; i++) { m[i] = new double[ncB]; for (int j=0; j<ncB; j++) m[i][j] = 0; } for(int i=0; i<nlA ; i++) for(int j=0; j<ncB ; j++) m[i][j]=(A.GetValue(i,j))-(B.GetValue(i,j)); result.Set(m); return result; } }
Matrice operator*(Matrice A, Matrice B) { int nlA, ncA, nlB, ncB; A.GetSize(nlA, ncA); B.GetSize(nlB, ncB); if(ncA!=nlB) { cout << "lol les matrice ça ce multiplies pas comme ça fdp" << endl; } else { Matrice result(nlA, ncB); double** m = new double*[nlA]; for(int i=0; i<nlA ; i++) { m[i] = new double[ncB]; } for(int i=0; i<nlA ; i++) { for(int j=0; j<ncB ; j++) { for(int k=0; k<ncA ; k++) { m[i][j]+=(A.GetValue(i,k))*(B.GetValue(k,j)); } } } result.Set(m); return resultat; } }