矩阵和向量乘法

3
假设我们有一个3*3的矩阵,如下所示:
1 3  4
2 6 8
9 0 12

还有一些像这样的向量:

1   2   3 

我的问题是:如何实现乘法运算?我有以下示例代码:
#include <cstdlib>
#include <math.h>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int a[3][3]={{ 2,4,3},{1,5,7},{0,2,3}};
    int b[]={2,5,6};
    int c[3];

    for (int i=0;i<3;i++){
         c[i]=0;
    }

    for (int i=0;i<3;i++){
        for (int j=0;j<3;j++){
            c[i]+=( a[i][j]*b[j]);
        }
    }

    for (int i=0;i<3;i++){
        cout<<a[i]<<"  "<<endl;
    }

    system("PAUSE");
    return EXIT_SUCCESS;
}

我得到的结果是:
0x22ff10
0x22ff1c
0x22ff28

1
你不能这样打印数组。你需要编写一个循环来逐个打印每个元素。 - Mysticial
5个回答

8

更改:

 for (int i=0;i<3;i++){
      cout<<a[i]<<"  "<<endl;

to:

 for (int i=0;i<3;i++){
      cout<<c[i]<<"  "<<endl;

4
我认为你在最后一个循环中应该打印c[i]而不是a[i]

3

设计一个对象?以下是一些伪代码,可供您参考:

// matrix of ints, floats, doubles, whatever numeric type you want
template<typename T>
class Matrix
{
public:
   Matrix(int rows, int cols)
   {
      // init m_values to appropriate rows and cols
   }

   Matrix<T> operator+(const Matrix<T>& rhs)
   {
       // add this matrix to the rhs matrix
   }

   Matrix<T> operator*(const Matrix<T>& rhs)
   {
       // verify both matrices have same dimensions (3x3 etc)
       // multiple this matrix by rhs by indexing into m_values
   }

   // etc

private:
   // two dimensional dynamic array of type T values
   std::vector<std::vector<T>> m_values; 
};

您还可以创建非成员模板函数来执行操作。如果您想让它看起来更加高端,可以创建一个表示具有值、相等性、行操作等的“Row”类。然后,基于一组行向量创建一个“Matrix”类。

0
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
    int a[3][3]={{ 1,2,3},{4,5,6},{7,8,9}};
    int b[]={1,2,3};
    int c[3];

    for (int i=0;i<3;i++)
    {
         c[i]=0;
    }

    for (int i=0;i<3;i++)
    {
        for (int j=0;j<3;j++)
        {
            c[i]+=(a[i][j]*b[j]);
        }
    }

    for (int i=0;i<3;i++){
        cout<<c[i]<<"  "<<endl;
    }
    system ("pause>0");

}

1
尝试为您的代码添加一些上下文,以帮助未来的读者更好地理解其含义。 - Grant Miller

0

并行计算中的另一个公式:

 #include <iostream>
 #include<vector>
 #include<ctime>
 #include<omp.h>

    using namespace std;

const int matSize = 3;
int mat[matSize][matSize];

int main()
{
    clock_t t1, t2;
    double wt1, wt2;

    vector<int> vec;

    for (int i = 0; i < matSize; i++)
    {
        for (int j = 0; j < matSize; j++)
        {
            mat[i][j] = i + j;
        }
    }

    for (int i = 0; i < matSize; i++)
    {
        vec.push_back(i);
    }

    long sum;
    vector<int> res;

    t1 = clock();
    wt1 = omp_get_wtime();
    #pragma omp parallel for reduction(+:sum)
    {
        for (int i = 0; i < matSize; i++)
        {
            sum = 0;
            for (int j = 0; j < matSize; j++)
            {
                sum += mat[i][j] * vec[j];
            }
            res.push_back(sum);
        }
    }
    t2 = clock();
    wt2 = omp_get_wtime();


    cout << "the matrix " << endl;
    for (int i = 0; i < matSize; i++)
    {
        for (int j = 0; j < matSize; j++)
        {
            cout << mat[i][j] << "  ";
        }
        cout << endl;
    }

    cout << endl << "the vector " << endl;
    for (int i = 0; i < vec.size(); i++)
    {
        cout << vec[i] << endl;
    }

    cout << endl << "the result " << endl;
    for (int i = 0; i < res.size(); i++)
    {
        cout << res[i] << endl;
    }

    cout << "CPU time " << double(t2 - t1) / CLOCKS_PER_SEC << endl;
    cout << "wTime " << wt2 - wt1 << endl;

    return 0;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接