列主元高斯消去法c++
时间: 2023-06-17 14:08:06 浏览: 134
高斯列主元素消去法(C++).rar_site:www.pudn.com_高斯消去法c++
5星 · 资源好评率100%
以下是使用C++实现的列主元高斯消去法:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
const int N = 100; // 矩阵的最大维度
int main()
{
int n; // 矩阵的维度
double a[N][N], b[N], x[N]; // 矩阵和向量a、b,解向量x
// 输入矩阵和向量a、b
cout << "请输入矩阵的维度n:";
cin >> n;
cout << "请输入矩阵a:" << endl;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
cin >> a[i][j];
cout << "请输入向量b:" << endl;
for (int i = 0; i < n; i++)
cin >> b[i];
// 列主元高斯消去
for (int k = 0; k < n - 1; k++)
{
int p = k;
// 找到第k列绝对值最大的元素所在的行
for (int i = k + 1; i < n; i++)
if (fabs(a[i][k]) > fabs(a[p][k]))
p = i;
// 如果该元素为0,则矩阵不可逆,退出程序
if (a[p][k] == 0)
{
cout << "矩阵不可逆!" << endl;
return 0;
}
// 交换第k行和第p行
if (p != k)
{
for (int j = k; j < n; j++)
swap(a[k][j], a[p][j]);
swap(b[k], b[p]);
}
// 消元
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];
b[i] -= f * b[k];
a[i][k] = 0;
}
}
// 回带求解
for (int i = n - 1; i >= 0; i--)
{
double sum = 0;
for (int j = i + 1; j < n; j++)
sum += a[i][j] * x[j];
x[i] = (b[i] - sum) / a[i][i];
}
// 输出结果
cout << "解向量为:";
for (int i = 0; i < n; i++)
cout << x[i] << " ";
cout << endl;
return 0;
}
```
这段代码输入矩阵和向量a、b,通过列主元高斯消去得到矩阵的上三角形式,再通过回带求解得到解向量x。如果矩阵不可逆,则程序会退出。
阅读全文