列主元高斯消去法是求解线性方程组的直接方法,将系数矩阵化为上三角矩阵,使用当前行消去剩余行时,如果当前行的第一个元素非最大值,则需要与第一个元素为最大值的行进行元素互换,再使用当前行消去剩余行,然后回代方程求解。
c++代码如下:
#include<stdio.h>
#include<math.h>
#define N 3 //矩阵的阶数
using namespace std;
int main()
{
int i, j, k, r;
float t, d, l, a[N][N + 1];
for (i = 0; i < N; i++){
for (j = 0; j<N + 1; j++)
{
scanf("%f", &t);
a[i][j] = t;
}
}
for (k = 0; k<N - 1; k++)
{
d = a[k][k];
r = k;
for (i = k + 1; i<N; i++)
if (fabs(a[i][k])>fabs(d))
{
d = a[i][k]; r = i;
}
if (fabs(d)<1e-6) printf("data error");
if (r != k)
for (j = k; j<N + 1; j++)
{
t = a[r][j]; a[r][j] = a[k][j]; a[k][j] = t;
}
for (i = k + 1; i<N; i++)
{
l = a[i][k] / a[k][k];
for (j = k + 1; j<N + 1; j++)
a[i][j] = a[i][j] - l*a[k][j];
}
}
for (k = N - 1; k >= 0; k--)
{
t = 0;
for (j = k + 1; j<N; j++)
t = t + a[k][j] * a[j][N];
a[k][N] = (a[k][N] - t) / a[k][k];
}
for (i = 0; i<N; i++)
printf("x%d=%f\n", i + 1, a[i][N]);
return 0;
}