C++高斯消元法解线性方程组
时间: 2023-09-02 12:08:16 浏览: 132
你可以使用高斯消元法来解决线性方程组。以下是一个使用C++编写的示例代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
const double EPSILON = 1e-10; // 用于处理浮点数误差
// 高斯消元法解线性方程组
vector<double> gaussianElimination(vector<vector<double>>& A,
相关问题
用c++写一个高斯消元法解线性方程
好的,下面是一个用C++实现高斯消元法解线性方程组的例子:
```c++
#include <iostream>
#include <vector>
using namespace std;
vector<double> gauss(vector<vector<double>> A, vector<double> b) {
int n = A.size();
// 将增广矩阵初始化为 A 和 b 的组合
vector<vector<double>> aug(n, vector<double>(n+1));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
aug[i][j] = A[i][j];
}
aug[i][n] = b[i];
}
// 逐行消元
for (int i = 0; i < n; i++) {
// 找到主元素的行
int max_row = i;
for (int j = i+1; j < n; j++) {
if (abs(aug[j][i]) > abs(aug[max_row][i])) {
max_row = j;
}
}
// 将主元素所在行与第 i 行交换
swap(aug[i], aug[max_row]);
// 将第 i 行的主元素缩放为 1
double scale = aug[i][i];
aug[i][i] = 1;
for (int j = i+1; j <= n; j++) {
aug[i][j] /= scale;
}
// 将第 i 列下面的元素消为 0
for (int j = i+1; j < n; j++) {
double factor = aug[j][i];
aug[j][i] = 0;
for (int k = i+1; k <= n; k++) {
aug[j][k] -= factor * aug[i][k];
}
}
}
// 回代求解 x
vector<double> x(n);
for (int i = n-1; i >= 0; i--) {
x[i] = aug[i][n];
for (int j = i+1; j < n; j++) {
x[i] -= aug[i][j] * x[j];
}
}
return x;
}
int main() {
vector<vector<double>> A = {{2,3,1}, {4,1,-3}, {1,-1,2}};
vector<double> b = {9,-5,7};
vector<double> x = gauss(A, b);
for (int i = 0; i < x.size(); i++) {
cout << x[i] << " ";
}
cout << endl;
return 0;
}
```
这个程序使用了vector来存储矩阵和向量,首先将增广矩阵初始化为 A 和 b 的组合,然后逐行消元,最后回代求解 x。在实现过程中,需要注意处理主元素为0的情况,避免除以0的错误。
调用这个函数就可以得到解向量 x,例如:
```
vector<vector<double>> A = {{2,3,1}, {4,1,-3}, {1,-1,2}};
vector<double> b = {9,-5,7};
vector<double> x = gauss(A, b);
for (int i = 0; i < x.size(); i++) {
cout << x[i] << " ";
}
cout << endl;
```
输出结果为:
```
2 -1 3
```
这就是线性方程组的解。
用c++写一个高斯消元法求解线性方程组的代码
好的,以下是用C语言写的高斯消元法求解线性方程组的代码:
```c
#include <stdio.h>
#define N 3 // 方程组的未知数个数
int main()
{
double a[N][N+1] = {
{3.0, 2.0, -4.0, 3.0},
{2.0, 3.0, 3.0, 15.0},
{5.0, -3.0, 1.0, 14.0}
}; // 系数矩阵增广矩阵
// 高斯消元过程
for (int k = 0; k < N; k++) {
for (int i = k + 1; i < N; i++) {
double f = a[i][k] / a[k][k];
for (int j = k + 1; j <= N; j++) {
a[i][j] -= f * a[k][j];
}
}
}
// 回带求解
double x[N];
for (int i = N - 1; i >= 0; i--) {
x[i] = a[i][N] / a[i][i];
for (int j = i - 1; j >= 0; j--) {
a[j][N] -= a[j][i] * x[i];
a[j][i] = 0;
}
}
// 输出解
for (int i = 0; i < N; i++) {
printf("x%d = %f\n", i, x[i]);
}
return 0;
}
```
希望能对你有所帮助。接下来,你可以问我其它问题。