21xrx.com
2024-12-27 20:01:02 Friday
登录
文章检索 我的文章 写文章
C++代码:高斯消元法解线性方程组
2023-07-04 11:18:36 深夜i     --     --
C++代码 高斯消元法 线性方程组 解法 数学计算

高斯消元法是用于解决线性方程组的一种常见算法。在 C++ 中,我们可以通过编写相应的函数来实现高斯消元法。以下是一个简单的示例代码:


#include <iostream>

#include <cmath>

using namespace std;

const int maxn = 100;

double a[maxn][maxn], b[maxn];

int n;

void Gauss() {

  for(int k = 1; k <= n; k++) {

    int max = k;

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

      if(abs(a[i][k]) > abs(a[max][k]))

        max = i;

    }

    if(max != k) {

      for(int j = k; j <= n; j++) {

        swap(a[k][j], a[max][j]);

      }

      swap(b[k], b[max]);

    }

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

      double f = a[i][k] / a[k][k];

      b[i] -= f * b[k];

      for(int j = k + 1; j <= n; j++) {

        a[i][j] -= f * a[k][j];

      }

    }

  }

  for(int i = n; i >= 1; i--) {

    for(int j = i + 1; j <= n; j++) {

      b[i] -= a[i][j] * b[j];

    }

    b[i] /= a[i][i];

  }

}

int main() {

  cin >> n;

  for(int i = 1; i <= n; i++) {

    for(int j = 1; j <= n; j++) {

      cin >> a[i][j];

    }

    cin >> b[i];

  }

  Gauss();

  for(int i = 1; i <= n; i++) {

    cout << b[i] << " ";

  }

  cout << endl;

  return 0;

}

在这个示例中,我们首先输入了一个 n 阶矩阵 a 和一个 n 维向量 b,然后通过调用 Gauss 函数来解决线性方程组 a * x = b。Gauss 函数会先对矩阵进行行变换,最终将 a 变换成一个上三角矩阵,然后再通过回代求解出 x 向量。

需要注意的是,高斯消元法在处理某些情况下可能会遇到误差积累的问题,导致解不准确,因此在实际应用中需要对算法进行优化和参数调节。此外,在 n 很大的情况下,高斯消元法的时间复杂度会达到 O(n^3),因此在这种情况下可能需要采用其他方法来求解线性方程组。

  
  

评论区

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