void Guass()
{
double a[n][n+1]={0};
int k,i0;
double p,t,li,ep,sum;
printf("输入%d*%d的矩阵:\n",n,n+1);//输入系数矩阵
for(int i=0;i<n;i++)
for(int j=0;j<n+1;j++)
scanf("%lf",&a[i][j]);
printf("%d*%d的矩阵为:\n",n,n+1);
for(i=0;i<n;i++)
{
for(int j=0;j<n+1;j++)
printf("%5.2lf ",a[i][j]);
printf("\n");
}
/*消元*/
printf("输入ep:\n");
scanf("%d",&ep);
for(k=0;k<=n;k++)
{
p=0;
i0=k;
for(i=k;i<n;i++)//选主元
{
if(fabs(a[i][k])>p)
{
p=fabs(a[i][k]);
i0=i;
}
if(fabs(a[i0][k])<ep)printf("中断!\n");
}
for(int j=k;j<=n;j++)//换行
{
t=a[k][j];
a[k][j]=a[i0][j];
a[i0][j]=t;
}
for(i=k+1;i<=n;i++)//消元
{
li=a[i][k]/a[k][k];
a[i][k]=0;
for(j=k+1;j<=n;j++)
{
a[i][j]=a[i][j]-a[k][j]*li;
}
}
}
printf("高斯列主元法%d*%d的矩阵为:\n",n,n+1);
for(i=0;i<n;i++)
{
for(int j=0;j<n+1;j++)
printf("%5.2lf ",a[i][j]);
printf("\n");
}
a[n-1][n]=a[n-1][n]/a[n-1][n-1];//回代
for(i=n-2;i>=0;i--)
{
sum=0;
for(int j=i+1;j<n;j++)
{
sum=sum+a[i][j]*a[j][n];
}
a[i][n]=(a[i][n]-sum)/a[i][i];
}
for(i=0;i<n;i++)
{
printf("x%d=%5.2lf ",i+1,a[i][n]);
printf("\n");
}
}
double Guass_Seidel()
{
double c[n][n],d[n],x[n];
double a[n][n+1]={0};
int k,Nmax;
double ep,emax,s,t;
printf("输入%d*%d的矩阵:\n",n,n+1);//输入系数矩阵
for(int i=0;i<n;i++)
for(int j=0;j<n+1;j++)
scanf("%lf",&a[i][j]);
printf("%d*%d的矩阵为:\n",n,n+1);
for(i=0;i<n;i++)
{
for(int j=0;j<n+1;j++)
printf("%5.2lf ",a[i][j]);
printf("\n");
}
for(i=0;i<n;i++)
{
t=a[i][i];
for(int j=0;j<n+1;j++)
a[i][j]=a[i][j]/t;
a[i][i]=0;
}
for(i=0;i<n;i++)
for(int j=0;j<n;j++)
c[i][j]=-a[i][j];
printf("C:\n");
for(i=0;i<n;i++)
{
for(int j=0;j<n;j++)
printf("%5.2lf ",c[i][j]);
printf("\n");
}
for(i=0;i<n;i++)
d[i]=a[i][n];
printf("d:\n");
for(i=0;i<n;i++)
printf("%5.2lf\n",d[i]);
printf("输入ep和最大迭代次数Nmax:\n");
scanf("%lf lf",&ep,&Nmax);
printf("输入x0(%d个):\n",n);
for(i=0;i<n;i++)
scanf("%lf",&x[i]);
k=0;
do
{ emax=0;
for(i=0;i<n;i++)
{
s=d[i];
for(int j=0;j<n;j++)
s=s+c[i][j]*x[j];
if(fabs(s-x[i])>emax)
emax=fabs(s-x[i]);
x[i]=s;
}
k=k+1;
}while(emax>ep&&k>Nmax);
if(k<Nmax){printf("发散\n");return 0;}
for(i=0;i<n;i++)
{
printf("x%d=%5.2lf ",i+1,x[i]);
printf("\n");
}
return 0;
}