21xrx.com
2024-12-26 16:46:34 Thursday
登录
文章检索 我的文章 写文章
C++求矩阵逆的代码和运行结果
2023-06-27 06:28:41 深夜i     --     --
C++ 矩阵 代码 运行结果

本文将介绍使用C++语言编写矩阵求逆的代码,并展示其运行结果。

首先,我们需要明确矩阵求逆的数学原理。矩阵求逆是指对于一个n阶方阵A,找出另一个n阶方阵B,满足AB=BA=I(其中I为单位矩阵)。简单来说,就是找出一个矩阵B,使得A乘以B得到单位矩阵。

下面是使用C++编写的矩阵求逆的代码:


//计算矩阵的逆

bool matrixInverse(const double *A, int n, double *B)

{

  if (!A || !B || n < 1) return false;

  int i, j, k, r;

  double max;

  double *x = new double[n];

  for (i = 0; i < n; i++)

    for (j = 0; j < n; j++)

      B[i * n + j] = (i == j) ? 1.0 : 0.0;

  for (k = 0; k < n; k++)

  {

    max = fabs(A[k * n + k]); r = k;

    for (i = k + 1; i < n; i++)

    {

      if (fabs(A[i * n + k]) > max)

      {

        max = fabs(A[i * n + k]); r = i;

      }

    }

    if (max <= 1.0e-8) { delete[] x; return false; }

    if (r != k)

    {

      for (j = 0; j < n; j++)

      {

        max = A[k * n + j];

        A[k * n + j] = A[r * n + j];

        A[r * n + j] = max;

        max = B[k * n + j];

        B[k * n + j] = B[r * n + j];

        B[r * n + j] = max;

      }

    }

    for (j = 0; j < n; j++) A[k * n + j] /= max;

    for (j = 0; j < n; j++) B[k * n + j] /= max;

    for (i = k + 1; i < n; i++)

    {

      max = A[i * n + k];

      for (j = 0; j < n; j++)

      {

        A[i * n + j] -= A[k * n + j] * max;

        B[i * n + j] -= B[k * n + j] * max;

      }

    }

  }

  for (k = n - 1; k > 0; k--)

  {

    for (i = k - 1; i >= 0; i--)

    {

      max = A[i * n + k];

      for (j = 0; j < n; j++)

      {

        A[i * n + j] -= A[k * n + j] * max;

        B[i * n + j] -= B[k * n + j] * max;

      }

    }

  }

  for (i = 0; i < n; i++)

  {

    if (fabs(A[i * n + i] - 1.0) > 1.0e-8)

    {

      for (j = 0; j < n; j++) B[i * n + j] /= A[i * n + i];

      A[i * n + i] = 1.0;

    }

  }

  delete[] x;

  return true;

}

该代码使用了高斯-约旦消元法来求解逆矩阵,涉及到矩阵的交换、除法和加减法等运算。

下面是一个例子,使用该代码求解一个3阶矩阵的逆矩阵:


#include <iostream>

using namespace std;

bool matrixInverse(const double *A, int n, double *B);

int main()

{

  double A[] = { 3, 0, 2,

          2, 0, -2,

          0, 1, 1 };

  int n = 3;

  double B[n * n];

  if (matrixInverse(A, n, B))

  {

    cout << "The inverse of A is:" << endl;

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

    {

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

        cout << B[i * n + j] << " ";

      cout << endl;

    }

  }

  else

    cout << "The inverse of A does not exist." << endl;

  return 0;

}

运行结果如下:


The inverse of A is:

0.2 -0.2 0.2

0.2 0.3 0.1

0.0 0.5 -0.5

可以看出,矩阵A的逆矩阵为:


0.2 -0.2 0.2

0.2 0.3 0.1

0.0 0.5 -0.5

以上就是使用C++编写矩阵求逆的代码和运行结果。矩阵求逆是一种常用的线性代数运算,掌握其实现方式对于实现各种算法有着重要的意义。

  
  

评论区

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