|
#include<math.h>
#include<stdlib.h>
#include<iostream.h>
void main()
{ double A[][]={0};
double S,temp,M;
int N,i,j,k,r;
cout<<"Please input the N:"<<endl;
cin>>N;
cout<<"输入增广矩阵A"<<endl;//输入
for(i=0;i<N; i++){
for(j=0;j<N+1; j++)
cin>>A[i][j];
}
cout<<endl<<endl;
cout<<"增广矩阵A:"<<endl;//输出
for(i=0;i<N; i++)
{
for(j=0;j<N+1; j++)
cout<<A[i][j]<<'\t';
cout<<endl;
}
for(k=0;k<N-1;k++)
{
S=A[k][k];
r=k;
i=k+1;
do
{
if(fabs(S)<fabs(A[i][k]))//选主元
{
S=A[i][k];
r=i;
}
i++;
}while(i<=N-1);
cout<<"A[i][k]="<<S<<'\t'<<"r="<<r<<'\t'<<i<<endl;
if(S==0)
{
cout<<"A为奇异"<<endl;
}
if(r!=k)//行交换
{
for(j=0;j<N+1;j++)
{
temp=A[k][j];
A[k][j]=A[r][j];
A[r][j]=temp;
}
}
for(i=0;i<N; i++)//输出
{
for(j=0;j<N+1; j++)
cout<<A[i][j]<<'\t';
cout<<endl;
}
for(i=k+1;i<N;i++)//消元
{
M=A[i][k]/S;
cout<<"计算乘子:"<<M<<endl;
for(j=k;j<N+1;j++)
A[i][j]-=M*A[k][j];
}
cout<<endl<<endl;
for(i=0;i<N;i++) //输出
{
for(j=0;j<N+1;j++)
cout<<A[i][j]<<'\t';
cout<<endl;
}
}
cout<<"方程组的解"<<endl;
for(i=N-1;i>=0;i--)//回代
{
S=0;
j=i+1;
while(j!=N)
{
S+=A[i][j]*A[j][N+1];
j++;
}
A[i][N+1]=(A[i][N]-S)/A[i][i];//保存答案
}
for(k=0;k<N;k++) //输出答案
cout<<A[k][N+1]<<'\t';
cout<<endl<<endl;
} |
|