c++求解非齐次线性方程组
时间: 2023-06-27 13:06:15 浏览: 237
C++大作业高斯消元求解方程组.rar
5星 · 资源好评率100%
非齐次线性方程组可以表示为$Ax=b$的形式,其中$A$是系数矩阵,$x$是未知数向量,$b$是常数向量。求解非齐次线性方程组的经典方法是高斯-约旦消元法。
具体步骤如下:
1.将增广矩阵$[A|b]$进行初等行变换,将其化为阶梯形矩阵。
2.从最后一行开始,逐行求解$x_i$,也就是将该行中$x_i$以外的系数都代入到该行中,从而求出$x_i$的值。
3.倒推回去,依次求解$x_{i-1}$、$x_{i-2}$,直到求出$x_1$。
代码实现如下:
```c++
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
const int N = 3; //方程组的阶数
double a[N][N] = { {2, 1, -1}, {4, -6, 0}, {-2, 7, 2} }; //系数矩阵
double b[N] = { 8, -2, 14 }; //常数向量
double x[N]; //未知数向量
for (int k = 0; k < N - 1; k++)
{
for (int i = k + 1; i < N; i++)
{
double temp = a[i][k] / a[k][k];
for (int j = k; j < N; j++)
a[i][j] -= temp * a[k][j];
b[i] -= temp * b[k];
}
}
x[N - 1] = b[N - 1] / a[N - 1][N - 1];
for (int i = N - 2; i >= 0; i--)
{
double temp = b[i];
for (int j = i + 1; j < N; j++)
temp -= a[i][j] * x[j];
x[i] = temp / a[i][i];
}
cout << "The solution of the linear equations is:" << endl;
for (int i = 0; i < N; i++)
cout << "x[" << i << "]=" << x[i] << endl;
return 0;
}
```
上述代码中,$a$数组表示系数矩阵,$b$数组表示常数向量,$x$数组表示未知数向量。在第一个循环中,进行高斯-约旦消元法的初等行变换,将增广矩阵化为阶梯形矩阵。在第二个循环中,倒推回去,依次求解未知数$x_i$的值。最后输出$x$数组即为非齐次线性方程组的解。
阅读全文