/ / Mnożenie macierzy za pomocą wektorów 2D w C ++ - c ++, macierz, wektor

Mnożenie macierzy za pomocą wektorów 2D w C ++ - c ++, macierz, wektor

Próbuję zaprojektować program, który tworzyMacierz wykorzystująca wektory wektorów liczb całkowitych, a następnie mnoży ją z inną macierzą. Wiem, jak mnożyć macierze na papierze, ale kiedy próbuję go zaimplementować w moim programie, nie dostaję go do pracy Wiem, że obie macierze są poprawnie wprowadzone i są przekazywane poprawnie, ponieważ mam wyjście tych funkcji tak, że mogę debugować.Program działa niepoprawnie, gdy próbuję ich pomnożyć.Odpowiedź i liczba elementów nie są poprawne.Wiem, że "m brakuje czegoś, ale nie może dowiedzieć się, co.

Matrix Matrix::operator*(Matrix m){
vector<int> mRow = m.getRow(0);
vector<int> mCol = m.getCol(0);
vector<int> newElem;
int product = 0;

//adds the contents of the 2nd matrix to the 2d vector
vector< vector<int> > m2(mRow.size(), vector<int>(mCol.size()));
for (int i = 0; i < mRow.size(); i++){
mRow.clear();
mRow = m.getRow(i);
for (int j = 0; j < mCol.size(); j++){
m2[j][i] = mRow[j];
}

}

//Multiplies the matrices using the 2d matrix**THIS IS WHERE IT GOES WRONG**
for (int i = 0; i < row; i++){
for (int j = 0; j < column; j++){
product += matrix[i][j]*m2[j][i];
}
newElem.insert(newElem.begin()+i,product);
product = 0;
}

//displays the products so that i can see if its working
for (int i = 0; i < newElem.size(); i++){
cout << "  "<<newElem[i]<<endl;
}

//adds the new product vector to a new Matrix object and returns it
Matrix newM(row, mCol.size());
vector<int> temp;
for (int i = 0; i < row; i++){
for (int j = 0; j < mCol.size(); j++){
temp.insert(temp.begin()+j, newElem[0]);
newElem.erase(newElem.begin());
}
newM.setRow(temp,i);
temp.clear();
}
return newM;
}

Chociaż nie wiem, czy to pomaga, używam to witryna jako odniesienie dla pomnożenia 2 macierzy.

Odpowiedzi:

0 dla odpowiedzi № 1

Twoja reprezentacja macierzowa nie ma nic wspólnego zTwój błąd. Musisz mieć więcej zagnieżdżonych iteracji. Pomyśl o macierzy wyników i dokonaj jej iteracji, aby obliczyć jej każdy element. W pseudokod:

for i in result column
for j in result row
res[i, j] = multiply(m1, m2, i, j)

gdzie funkcją mnożenia jest zagnieżdżona pętla, coś takiego:

multiply(m1, m2, i, j)
{
val = 0;
for k in row
val += m1[i, k] * m2[k, j]
return val
}

Oto implementacja zewnętrznych pętli. Pamiętaj, że w kodzie nie ma sprawdzania błędów.

vector<vector<int> > ml;
vector<vector<int> > mr;
// fill in ml and mr
...

// result matrix
vector<vector<int> > res;

// allocate the result matrix
res.resize(ml.size());
for( it = res.begin(); it != res.end(); ++it)
it->resize(ml[0].size());


// loop through the result matrix and fill it in
for( int i = 0; i < res.size(); ++i)
for( int j = 0; j < res[0].size(); ++j)
res[i][j] =  multiply(ml, mr, i, j);

Pozostawiając prawidłową implementację funkcji mnożenia ().