锘??xml version="1.0" encoding="utf-8" standalone="yes"?>#include<iostream>
#include<math.h>
using namespace std;
#define MAX 100
double A[MAX+1][MAX+1];
double B[MAX+1];
double X[MAX+1];
double Z[MAX+1];
int D[MAX+1]; //鏈煡鍙橀噺浣嶇疆鐨勫彉鍖?/span>
int n;
int e;
void input()
{
int i,j;
printf("n:");
scanf("%d",&n);
printf("A[][]:\n");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%lf",&A[i][j]);
printf("B[]:\n");
for(i=1;i<=n;i++)
scanf("%lf",&B[i]);
printf("e:");
scanf("%lf",&e);
}
void SwapE(double a,double b) //swap elements
{
double T;
T=a;
a=b;
b=T;
}
void SwapR(int k,int kmi)
{
int j;
for(j=k;j<=n;j++)
SwapE(A[k][j],A[kmi][j]);
}
void SwapC(int k,int kmj)
{
int i;
for(i=k;i<=n;i++)
SwapE(A[i][k],A[i][kmj]);
}
void AllGaussianElimination()
{
int kmi,kmj;//the i and j of the max(abs) element when k
int i,j,k;
double T;
for(i=1;i<=n;i++)//鍒濆鍖栦綅緗彉閲忎綅緗?/span>
D[i]=i;
for(k=1;k<=n-1;k++)
{
//閫変富鍏?/span>
T=0;
for(i=k;i<=n;i++)
for(j=k;j<=n;j++)
if(fabs(A[i][j])>T)
{ T=fabs(A[i][j]); kmi=i;kmj=j;}
if(T<=e)
{printf("Error!\n"); return ;}
if(kmi!=k)
{ SwapR(k,kmi); SwapE(B[k],B[kmi]); }
if(kmj!=k)
{ SwapC(k,kmj); SwapE(D[k],D[kmj]); }
//娑堝厓
for(i=k+1;i<=n;i++)
{
T=A[i][k]/A[k][k];
B[i]-=T*B[k];
for(j=k;j<=n;j++)
A[i][j]-=T*A[k][j];
}
//鍥炰唬
if(A[n][n]<=e)
{printf("Error!\n");return ;}
Z[n]=B[n]/A[n][n];
double S_Aij_Zj;
for(i=n-1;i>=1;i--)
{
S_Aij_Zj=0;
for(j=i+1;j<=n;j++)
S_Aij_Zj+=A[i][j]*Z[j];
Z[i]=(B[i]-S_Aij_Zj)/A[i][i];
}
for(j=1;j<=n;j++)
X[D[j]]=Z[j];
}
}
void print(double X[])
{
int i;
printf("X[]:\n");
for(i=1;i<=n;i++)
printf("%f\n",X[i]);
}
int main()
{
input();
AllGaussianElimination();
print(X);
system("pause");
return 0;
}
#include<iostream>
#include<math.h>
using namespace std;
#define MAX 100
double A[MAX+1][MAX+1];
double B[MAX+1];
double X[MAX+1];
double e;
int n;
void ColGaussianElimination()
{
int i,j,k,kmi;
double T;
for(k=1;k<=n-1;k++)
{
//閫変富鍏?/span>
T=0;
for(i=k;i<=n;i++)
if( fabs(A[i][k])> T )
{ T=A[i][k];kmi=i;}
if( T<=e)
{ printf("Error!\n"); return ;}
if(kmi!=k)
{
T=B[k];B[k]=B[kmi];B[kmi]=T; //swap B[k] and B[kmi]
for(j=k;j<=n;j++) //swap row kmi and k of A
{
T=A[k][j];
A[k][j]=A[kmi][j];
A[kmi][j]=T;
}
}
//娑堝厓
for(i=k+1;i<=n;i++)
{
T=A[i][k]/A[k][k];
B[i]-=T*B[k];
for(j=k;j<=n;j++)
A[i][j]-=T*A[k][j];
}
}
//鍥炰唬
if( fabs(A[n][n])<=e )
{ printf("Error!\n"); return ;}
X[n]=B[n]/A[n][n];
double S_Aij_Xj;
for(i=n-1;i>=1;i--)
{
S_Aij_Xj=0;
for(j=i+1;j<=n;j++)
S_Aij_Xj+=A[i][j]*X[j];
X[i]=(B[i]-S_Aij_Xj)/A[i][i];
}
}
void print(double X[])
{
int i;
printf("X[]:\n");
for(i=1;i<=n;i++)
printf("%f\n",X[i]);
}
int main()
{
int i,j;
printf("n:");
scanf("%d",&n);
printf("A[][]:\n");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%lf",&A[i][j]);
printf("B[]:\n");
for(i=1;i<=n;i++)
scanf("%lf",&B[i]);
printf("e:");
scanf("%lf",&e);
ColGaussianElimination();
print(X);
system("pause");
return 0;
}