矩阵乘法C ++中的分割错误

时间:2019-05-05 17:15:41

标签: c++ matrix

我正在尝试创建一个函数,该函数接收两个矩阵作为参数并返回两者的乘法。但是,当我尝试对其进行测试时,它返回了细分错误,有人可以告诉我原因吗?并帮助我修复它吗?

这是我的功能代码:

#include <iostream>
#include <math.h>
#include <fstream>
#include <vector>

using namespace std;

vector<vector<double> > MMultiplication(vector<vector<double> > a, vector<vector<double> > b) {

    int a_columns = a[0].size();
    int a_rows = a.size();
    int b_columns = b[0].size();
    int b_rows = b.size();


    < vector<vector<double> > result;
    result.resize(a_columns);
    for (int i = 0; i < m; ++i)
    {
        //Grow Columns by b_rows
        result[i].resize(b_rows);
    }

    for (int p = 0; p < a_rows; p++) {
        for (int q = 0; q < b_columns; q++) {
            result[p][q] = 0;
        }
    }

    if (a_columns != b_rows) {
        cout << "Error: The number of columns of the first matrix needs to be equal to the number of rows of the second matrix" << endl;
        return result;
    }

    for (int i = 0; i < a_rows; i++) { //i iterate a rows
        for (int j = 0; j = b_columns; j++) //j iterates b columns
        {
            for (int k = 0; k < a_columns; k++) { //k goes back to a and iterates its columns
                result[i][j] += a[i][k] * b[k][j]; //sums all multiplications into result[i][j]
            }
        }
    }

    return result;
}

这是我用来测试功能的主要方法:

int main ()
{
  vector < vector < double >>a;
  int m = 4, n = 2;
  //Grow rows by m
  a.resize (m);
  for (int i = 0; i < m; ++i)
    {
      //Grow Columns by n
      a[i].resize (n);
    }
  a[0] =
  {
  1, 0};
  a[1] =
  {
  1, 1};
  a[2] =
  {
  1, 2};
  a[3] =
  {
  1, 3};
  cout << a.size () << endl;
  cout << a[0].size () << endl;

  vector < vector < double >>b;
  int o = 2, p = 4;

  b.resize (o);
  for (int i = 0; i < o; i++)
    {
      b[i].resize (p);
    }
  b[0] =
  {
  1, 2, 3, 4};
  b[1] =
  {
  1, 3, 5, 7};

  vector < vector < double >>result = MMultiplication (a, b);
  cout << result.size () << endl;
  cout << result[0].size () << endl;

  /* for(int k = 0; k < result.size(); k++) {
     for(int q = 0; q < result[0].size(); q++)
     cout << result[k][q] << endl;
     } */

}

此外,必须指出,到目前为止,如果无法将a和b相乘,则该函数将返回零矩阵。

谢谢。

0 个答案:

没有答案