列主元高斯消去法c++
时间: 2023-09-13 10:08:00 浏览: 265
以下是一个基于列主元高斯消去法的C++代码示例:
```c++
#include <iostream>
#include <cmath>
#define N 3 // 矩阵维数
using namespace std;
int main()
{
double A[N][N+1] = {{2, 1, -1, 8},
{-3, -1, 2, -11},
{-2, 1, 2, -3}}; // 增广矩阵
double x[N] = {0}; // 存放解向量
double max; // 用于存放主元的最大值
int index; // 用于存放主元所在行的下标
// 高斯消去
for(int k=0; k<N-1; k++) // k为列的下标
{
max = abs(A[k][k]); // 初始化最大值为第k行的第k个元素的绝对值
index = k; // 初始化主元所在行的下标为k
// 在第k列中找到最大的主元
for(int i=k+1; i<N; i++)
{
if(abs(A[i][k]) > max)
{
max = abs(A[i][k]);
index = i;
}
}
// 交换第k行和主元所在行
if(index != k)
{
for(int j=k; j<N+1; j++)
{
swap(A[k][j], A[index][j]);
}
}
// 消元
for(int i=k+1; i<N; i++)
{
double factor = A[i][k] / A[k][k];
for(int j=k+1; j<N+1; j++)
{
A[i][j] = A[i][j] - factor * A[k][j];
}
A[i][k] = 0; // 将下三角部分元素置0
}
}
// 回带求解
x[N-1] = A[N-1][N] / A[N-1][N-1];
for(int i=N-2; i>=0; i--)
{
double sum = 0;
for(int j=i+1; j<N; j++)
{
sum += A[i][j] * x[j];
}
x[i] = (A[i][N] - sum) / A[i][i];
}
// 输出解向量
cout << "Solution vector:" << endl;
for(int i=0; i<N; i++)
{
cout << "x[" << i << "] = " << x[i] << endl;
}
return 0;
}
```
这个代码示例中,使用了一个 $N\times(N+1)$ 的增广矩阵来表示线性方程组。变量 `A` 存放了增广矩阵,而数组 `x` 存放了解向量。在高斯消元的过程中,使用了列主元法来选取主元,并在选定主元后将主元所在行与当前处理列的第一行交换。在高斯消元完成之后,使用回带法来求解解向量。
阅读全文