21xrx.com
2024-12-22 22:38:31 Sunday
登录
文章检索 我的文章 写文章
C++矩阵代码实现
2023-06-22 09:12:53 深夜i     --     --
C++ 矩阵 代码 实现 数组

矩阵是线性代数中的经典概念,广泛应用于计算机科学、数学、物理学、工程学等领域。在C++中,我们可以使用数组或者类来表示矩阵,并对矩阵进行各种运算操作。

数组实现矩阵

数组是C++中最基本的数据结构,也是非常适合表示矩阵的数据结构。我们可以使用二维数组来表示矩阵,并且使用循环语句实现各种矩阵运算。

下面是一个简单的二维数组实现矩阵乘法的代码:

#include

using namespace std;

int main()

{

  int a[3][3] = { 3, 6, 8};

  int b[3][3] = {10, 15, 18};

  int c[3][3] = {0};

  for (int i = 0; i < 3; i++)

  {

    for (int j = 0; j < 3; j++)

    {

      for (int k = 0; k < 3; k++)

      {

        c[i][j] += a[i][k] * b[k][j];

      }

    }

  }

  for (int i = 0; i < 3; i++)

  {

    for (int j = 0; j < 3; j++)

    {

      cout << c[i][j] << " ";

    }

    cout << endl;

  }

  return 0;

}

在上述代码中,我们首先定义了两个3x3的矩阵a和b,并将其初始化。然后,我们定义了一个名为c的3x3的矩阵,用于存储矩阵乘积的结果。

接下来,我们使用三重循环计算矩阵乘积,并将结果保存在矩阵c中。最后,我们使用两重循环遍历矩阵c,并输出其元素的值。

类实现矩阵

数组是实现矩阵最简单的方法,但是它存在一些局限性,比如只能表示固定大小的矩阵。为了解决这个问题,我们可以使用类来表示矩阵,并且定义各种成员函数来实现各种矩阵运算。

下面是一个示例代码,展示了如何使用类来表示矩阵,并实现矩阵加法和乘法功能:

#include

#include

using namespace std;

class Matrix

{

public:

  Matrix(int rows, int cols, int initial_value=0)

  {

    this->rows = rows;

    this->cols = cols;

    data = vector >(rows, vector (cols, initial_value));

  }

  void add(Matrix b)

  {

    if (rows != b.get_rows() || cols != b.get_cols())

    {

      cerr << "The sizes of two matrices don't match." << endl;

      exit(1);

    }

    else

    {

      for (int i = 0; i < rows; i++)

      {

        for (int j = 0; j < cols; j++)

        {

          data[i][j] += b.get_data()[i][j];

        }

      }

    }

  }

  void multiply(Matrix b)

  {

    if (cols != b.get_rows())

    {

      cerr << "The sizes of two matrices don't match." << endl;

      exit(1);

    }

    else

    {

      Matrix c(rows, b.get_cols());

      for (int i = 0; i < rows; i++)

      {

        for (int j = 0; j < b.get_cols(); j++)

        {

          for (int k = 0; k < cols; k++)

          {

            c.get_data()[i][j] += data[i][k] * b.get_data()[k][j];

          }

        }

      }

      rows = c.get_rows();

      cols = c.get_cols();

      data = c.get_data();

    }

  }

  void print()

  {

    for (int i = 0; i < rows; i++)

    {

      for (int j = 0; j < cols; j++)

      {

        cout << data[i][j] << " ";

      }

      cout << endl;

    }

  }

  int get_rows() {return rows;}

  int get_cols() {return cols;}

  vector > get_data() {return data;}

private:

  int rows;

  int cols;

  vector > data;

};

int main()

{

  Matrix a(3, 3, 1);

  Matrix b(3, 3, 2);

  a.print();

  cout << endl;

  b.print();

  cout << endl;

  a.add(b);

  a.print();

  cout << endl;

  b.multiply(a);

  b.print();

  cout << endl;

  return 0;

}

在上述代码中,我们定义了一个名为Matrix的类,它包含了矩阵的行列数和数据成员。矩阵的数据使用二维vector表示,这种方式可以动态创建矩阵,并支持动态调整矩阵的大小。

我们使用add()和multiply()函数分别实现了矩阵加法和乘法,这些函数首先检查两个矩阵的大小是否匹配,并进行相应的运算。在矩阵乘法运算中,我们使用了新建一个矩阵c来保存乘积的结果,并将其赋值给矩阵b。

最后,我们使用print()函数输出矩阵的元素,以及在main()函数中演示了如何调用Matrix类的成员函数。

总结

矩阵是计算机科学和数学中非常重要的概念,被广泛应用于各种领域中。在C++中,我们可以使用数组或类来表示矩阵,并实现各种矩阵运算。数组实现简单,但存在一些限制,类实现复杂,但支持动态调整矩阵的大小。在实际开发中,我们可以根据实际情况选择适合的实现方式,并注意代码的可读性和运行效率。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复