C语言实现高斯消去法(数学实验)
代码如下
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
double A[MAX][MAX];
double b[MAX];
double X[MAX];
int NUM;
void Input_Matrix()//输入矩阵
{
int i,j;
printf("系数矩阵A的阶数:\n");
scanf("%d",&NUM);
for(i=1; i<=NUM; i++)
{
printf("系数矩阵A的第%d行元素:\n",i);
for(j=1; j<=NUM; j++)
scanf("%lf",&A[i-1][j-1]);
}
printf("右端项b:\n");
for(i=1; i<=NUM; i++)
{
scanf("%lf",&b[i-1]);
}
printf("输入的系数矩阵A:\n");
for(i=0; i<NUM; i++)
{
for(j=0; j<NUM; j++)
printf("%.4lf\t",A[i][j]);
printf("\n");
}
printf("输入的右端项b:\n");
for(i=0; i<NUM; i++)
printf("%.4lf\n",b[i]);
}
int main()
{
int i,j,k;
float mik;//消元过程所用变量
float S;//回代过程所用变量
Input_Matrix();
//消元
for(k=0; k<NUM-1; k++)
{
if(!A[k][k])
return -1;
for(i=k+1; i<NUM; i++)
{
mik=A[i][k]/A[k][k];
for(j=k; j<NUM; j++)
{
A[i][j]=A[i][j]-mik*A[k][j];
}
b[i]=b[i]-mik*b[k];
}
}
printf("消元后的矩阵A:\n\n");
for(i=0; i<NUM; i++)
{
for(j=0; j<NUM; j++)
printf("%.4lf\t",A[i][j]);
printf("\n");
}
printf("消元后的右端项b:\n\n");
for(i=0; i<NUM; i++)
printf("%.4lf\n",b[i]);
//回代
X[NUM-1]=b[NUM-1]/A[NUM-1][NUM-1];
for(k=NUM-2; k>=0; k--)
{
S=b[k];
for(j=k+1; j<NUM; j++)
{
S=S-A[k][j]*X[j];
}
X[k]=S/A[k][k];
}
printf("结果X=\n\n");
for(i=0;i<NUM;i++)
printf("%.4lf\n",X[i]);
return 0;
}
版权声明:本文为qq_43452446原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。