用c++编写顺序消元法和列主元消元法的程序求解线性方程组:要求输出最后消元后的上三角矩阵和方程组的解,并比较计算结果精度
时间: 2024-05-04 08:22:38 浏览: 107
只需要用一张图片素材文档选择器.zip
以下是用C++编写的顺序消元法和列主元消元法求解线性方程组的程序。
顺序消元法:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
const int MAXN = 100;
int n; // 方程组的未知数个数
double a[MAXN][MAXN + 1]; // 增广矩阵
void print() { // 输出增广矩阵
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n + 1; j++) {
cout << a[i][j] << " ";
}
cout << endl;
}
}
int main() {
cout << "请输入方程组的未知数个数:";
cin >> n;
cout << "请输入增广矩阵(每行 n+1 个数,用空格分隔):" << endl;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n + 1; j++) {
cin >> a[i][j];
}
}
for (int k = 1; k <= n - 1; k++) { // 消元过程
for (int i = k + 1; i <= n; i++) {
double m = a[i][k] / a[k][k];
for (int j = k + 1; j <= n + 1; j++) {
a[i][j] -= m * a[k][j];
}
}
}
cout << "消元后的增广矩阵为:" << endl;
print();
double x[MAXN]; // 方程组的解
for (int i = n; i >= 1; i--) { // 回代求解
x[i] = a[i][n + 1];
for (int j = i + 1; j <= n; j++) {
x[i] -= a[i][j] * x[j];
}
x[i] /= a[i][i];
}
cout << "方程组的解为:";
for (int i = 1; i <= n; i++) {
cout << x[i] << " ";
}
cout << endl;
return 0;
}
```
列主元消元法:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
const int MAXN = 100;
int n; // 方程组的未知数个数
double a[MAXN][MAXN + 1]; // 增广矩阵
void print() { // 输出增广矩阵
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n + 1; j++) {
cout << a[i][j] << " ";
}
cout << endl;
}
}
int main() {
cout << "请输入方程组的未知数个数:";
cin >> n;
cout << "请输入增广矩阵(每行 n+1 个数,用空格分隔):" << endl;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n + 1; j++) {
cin >> a[i][j];
}
}
for (int k = 1; k <= n - 1; k++) { // 消元过程
int p = k;
for (int i = k + 1; i <= n; i++) {
if (fabs(a[i][k]) > fabs(a[p][k])) {
p = i;
}
}
if (p != k) {
for (int j = k; j <= n + 1; j++) {
swap(a[k][j], a[p][j]);
}
}
for (int i = k + 1; i <= n; i++) {
double m = a[i][k] / a[k][k];
for (int j = k + 1; j <= n + 1; j++) {
a[i][j] -= m * a[k][j];
}
}
}
cout << "消元后的增广矩阵为:" << endl;
print();
double x[MAXN]; // 方程组的解
for (int i = n; i >= 1; i--) { // 回代求解
x[i] = a[i][n + 1];
for (int j = i + 1; j <= n; j++) {
x[i] -= a[i][j] * x[j];
}
x[i] /= a[i][i];
}
cout << "方程组的解为:";
for (int i = 1; i <= n; i++) {
cout << x[i] << " ";
}
cout << endl;
return 0;
}
```
这两个程序的输入和输出方式相同,可以直接运行。运行程序后,先输入方程组的未知数个数,然后输入增广矩阵,程序会输出消元后的增广矩阵和方程组的解。
另外,为了比较计算结果精度,可以将程序中的数据类型 `double` 改为 `long double`。
阅读全文