列主元高斯消去法 cpp
时间: 2025-01-16 11:12:11 浏览: 13
列主元高斯消去法的C++实现
列主元高斯消去法是一种用于解线性方程组的有效方法。该算法通过选择每一步的最大元素作为主元来提高数值稳定性。
以下是使用C++实现列主元高斯消去法的一个例子:
#include <iostream>
#include <vector>
using namespace std;
void swapRows(vector<vector<double>>& matrix, vector<double>& b, int row1, int row2) {
if (row1 != row2) {
swap(matrix[row1], matrix[row2]);
swap(b[row1], b[row2]);
}
}
// 高斯消去法带列主元
bool gaussianEliminationWithColumnPivoting(vector<vector<double>>& A, vector<double>& b, vector<double>& x) {
int n = static_cast<int>(A.size());
for (int k = 0; k < n; ++k) {
// 找到第k列中的最大元素并交换行
double maxElement = abs(A[k][k]);
int maxRow = k;
for (int i = k + 1; i < n; ++i) {
if (abs(A[i][k]) > maxElement) {
maxElement = abs(A[i][k]);
maxRow = i;
}
}
if (maxElement == 0) {
cout << "The system is singular." << endl;
return false;
}
swapRows(A, b, k, maxRow);
// 消元过程
for (int i = k + 1; i < n; ++i) {
double factor = A[i][k] / A[k][k];
for (int j = k; j < n; ++j) {
A[i][j] -= factor * A[k][j];
}
b[i] -= factor * b[k];
}
}
// 后向代入求解X
for (int i = n - 1; i >= 0; --i) {
double sum = 0.0;
for (int j = i + 1; j < n; ++j) {
sum += A[i][j] * x[j];
}
x[i] = (b[i] - sum) / A[i][i];
}
return true;
}
此代码实现了带有列主元选择的高斯消去法,其中swapRows
函数负责交换两行的位置以确保每次迭代都选取当前列中绝对值最大的元素作为主元[^1]。
相关推荐

















