高斯消元求方程解 找错!!!
#include<stdio.h>#include <stdlib.h>
void main()
{
void gaosi(double a[20][20],double result[20],int n);
double a[20][20],result[20];
int n,i,j;
FILE*fp;
if((fp=fopen("input.txt","r"))==NULL)
{
printf("can not open the file");
exit(0);
}
fscanf(fp,"%d",&n);
printf("未知数个数为:%d\n",n);
while(!feof(fp))
{
for(i=0;i<n;i++)
for(j=0;j<n+1;j++)
fscanf(fp,"%3lf",&a[i][j]);
}
if(i<n)
{
printf("无穷解");
exit(0);
}
printf("矩阵为:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n+1;j++)
printf("%5.1lf",a[i][j]);
printf("\n");
}
fclose(fp);
gaosi(a,result,n);
}
void gaosi(double a[20][20],double result[20],int n)
{
int i,j,max,k,r,flag=0;
double t,temp;
for(j=0;j<n+1;j++)
{
for(i=0;i<n;i++)
{
max=0;
if(a[max][j]<a[i][j])max=i;
}
for(k=0;k<n+1;k++)
{
t=a[max][k];
a[max][k]=a[j][k];
a[j][k]=t;
temp=a[j][j];
}
for(i=j+1;i<n;i++)
for(k=0;k<n+1;k++)
{
a[j][k]/=temp;
a[i][k]-=a[i][j]*a[j][k];
}
}
for(j=0;j<n+1;j++)
{
for(i=0;i<n;i++)
{
printf("%4.lf\n",a[i][j]);
}
}
for(i=0;i<n;i++)
{
k=0;
for(j=0;j<n+1;j++)
{
if(a[i][j]==0)k++;
}
if(k==n+1)flag=1;
}
if(a[n-1][n]!=0&&a[n-1][n-1]==0)printf("无解\n");
else if(flag)printf("无穷解\n");
else
{
for(i=n-1;i>=0;i--)
{
result[i]=a[i][n];
for(j=n-1;j>i;j--)
result[i]-=a[i][j]*result[j];
}
for(i=0;i<n;i++)
printf("%5.2lf\n",result[i]);
}
}