高斯消元法,是线性代数中的一个算法,可以用来解现行方程组,并且可以求出矩阵的秩。
原理:若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程组。
原博主
高斯消元法后,自己也试着写了一下。
代码如下:
#include<iostream>
//file read
using namespace std;
//系数矩阵
float matrix[20][20];
//常数向量b
float b[20];
float x[20] = {0};
void create_Augmentedmatrix(const int n)
{
for (int i = 0; i < n; i++)
{
matrix[i][n] = b[i];
}
}
void show_Matrix(const int n)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n + 1; j++)
{
if(j<n)cout << matrix[i][j] << " ";
else
{
cout <<" "<< matrix[i][j] << " ";
}
}
cout << endl;
}
}
void Gauss(int n)
{
float k;
for (int i = 0; i < n-1; i++)
{
for (int j = i+1; j < n; j++)
{
//j是行
k = matrix[j][i]/matrix[i][i] ;
for (int z = 0; z < n+1; z++)
{
matrix[j][z] =matrix[j][z]-k*matrix[i][z];
}
}
cout << "The" << i+1 << "row" << endl;
show_Matrix(n);
}
}
void get_X(int n)
{
for (int i = n - 1; i >-1; i--)
{
float sum = 0;
for (int j = 0; j < n; j++)
{
if(j!=i)
sum += (x[j] * matrix[i][j]);
}
x[i]=(matrix[i][n] - sum) / matrix[i][i];
}
}
int main()
{
int n;//矩阵的n
cin >> n;
//输入系数矩阵n*n
cout << "please input in coefficient vector x[][]" << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cin >> matrix[i][j];
}
}
cin.get();
cout << "please input in constant vector b[]" << endl;
for (int i = 0; i < n; i++)
{
cin >> b[i];
}
cin.get();
create_Augmentedmatrix(n);
Gauss(n);
cout << "show the Upper triangular matrix" << endl;
show_Matrix(n);
get_X(n);
cout << "answer" << endl;
for (int i = 0; i < n; i++)
{
cout << "x" << i + 1 << "="<<x[i] << endl;
}
cin.get();
}