C语言 高斯列主消元法
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 10
#define EPS 1e-10 // 定义 EPS为1乘以10的-10次方
void main()
{
float A[N][N+1]; // 定义 zengguang 矩阵
float sum=0;
int i,j,k;
int n;
int flag=1;
while(flag){
printf("请输入系数矩阵的大小:");
scanf("%d", &n);
if(n>N){
printf("矩阵过大!\n");
continue;
}
flag=0;
}
printf("请输入系数矩阵值:\n");
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
printf("a[%d][%d]: ", i, j);
scanf("%f", &A[i][j]);
}
}
/*显示原始矩阵*/
printf("\n原始矩阵:\n");
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
printf("%0.3f ",A[i][j]);
printf("\n");
}
printf("\n\n");
int x[N];
int Pr,t,total;
for(k=1;k<N;k++)
{
Pr=k-1;
for(i=k;i<N;i++)
{
if(abs(A[i][k-1])>abs(A[Pr][k-1]))
{
Pr=i;
}
}//End For i
if(abs(A[i][k-1])<EPS)
{
printf("主元接近于0,方法失效\n");
exit(0);
}
if(Pr>k-1)
{
for(j=k-1;j<N+1;j++)
{
t=A[k-1][j];
A[k-1][j]=A[Pr][j];
A[Pr][j]=t;
}//End For j
} //End if
for(i=k;i<N;i++)
{
t=A[i][k-1]/A[k-1][k-1];
for(j=k-1;j<N+1;j++)
{
A[i][j]=A[i][j]-t*A[k-1][j];
} //End For j
} //End For i
} //End For k
if(abs(A[N-1][N-1])<EPS)
{
printf("主元接近于0,方法失效\n");
exit(0);
} //End If
x[N-1]=A[N-1][N]/A[N-1][N-1];
for(i=N-2;i>=0;i--)
{
total=A[i][N];
for(j=N-1;j>=i+1;j--)
{
total-=A[i][j]*x[j];
}
x[i]=total/A[i][i];
}//End For i
for(i=0;i<N;i++)
{
printf("\nx[%d]=%d\n",(i+1),x[i]);
}//End For i
}