采用高斯列主元消元法解线性方程组
发布网友
发布时间:2023-09-18 02:18
我来回答
共2个回答
热心网友
时间:2024-12-05 10:57
int I;
#include <stdio.h>
void input(float a[100][100],float b[100][1],int n)
{int i,j;
char infile[20];
FILE *input;
printf("input infile name:\n");
getch();
scanf("%s",infile);
input=fopen(infile,"r");
if(input==0)
{
printf("Can't open the file\n");
exit(0);
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
fscanf(input,"%f",&a[i][j]);
for(i=0;i<n;i++)
fscanf(input,"%f",&b[i][0]);
fclose(input);
return;
}
float max_value(float a[100][100],int n,int k)
{float max;
int i;
max=a[k][k];
for(i=k+1;i<n;i++)
if(max<a[i][k])
{
max=a[i][k];
I=i;
}
return(max);
}
void change(float *p,float *q)
{
float temp;
temp=*p; *p=*q; *q=temp;
return;
}
main()
{float a[100][100],b[100][1],x[100],max,m,*c,*d;
int k=0,q=0,n,i,j;
printf("n=");
scanf("%d",&n);
input(a,b,n);
for(k=0;k<n && q==0;k++)
{
max=max_value(a,n,k);
if(max==0)
q=1;
else
{ if(I!=k)
{
c=&b[I][0];
d=&b[k][0];
change(c,d);
for(j=k;j<n;j++)
{
c=&a[I][j];
d=&a[k][j];
change(c,d);
}
}
for(i=k+1;i<n;i++)
{
m=a[i][k]/a[k][k];
b[i][0]=b[i][0]-b[k][0]*m;
for(j=0;j<n;j++)
a[i][j]=a[i][j]-a[k][j]*m;
}
}
}
for(i=n-1;i>=0;i--)
{
for(j=i+1;j<n;j++)
b[i][0]=b[i][0]-a[i][j]*x[j];
x[i]=b[i][0]/a[i][i];
}
for(i=0;i<n;i++)
printf("x[%d]=%6.2f\n",i,x[i]);
/*printf("%f",max);*/
/*for(i=0;i<n;i++)
for(j=0;j<n;j++)
printf("%f",a[i][j]);
getch();
for(i=0;i<n;i++)
printf("%f",b[i][0]);
getch();*/
}
热心网友
时间:2024-12-05 10:58
我给你介绍个简单的方法吧:只要给定N阶,用Excel可以做个模板,就可以解出来了,无需编程。
当然编程也可解决的啦