📄 gauss消去法和列主元gauss消去法t2_1b.cpp
字号:
// cpp t2_1b源代码 上机练习题2_1b"
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
const int N=7;
static double aa[N][N+1]=
{
{3,-5,6,4,-2,-3,8,11},
{1,1,-9,15,1,-9,2,2},
{2,-1,7,5,-1,6,11,29},
{-1,1,3,2,7,-1,-2,9},
{4,3,1,-7,2,1,1,5},
{2,9,-8,11,-1,-4,-1,8},
{7,2,-1,2,7,-1,9,25}
},aa2[N][N+1];
double x[N+1];
int main()
{
int i,j,k,u;
double m;
void ShowResult(double aa[N][N+1],double x[N+1]) ; //函数声明
for(i=0;i<N;i++) ///数据备份
for(j=0;j<N+1;j++)
aa2[i][j]=aa[i][j];
cout<<"上机练习题2_1b"<<endl;
cout<<"增广矩阵(A|b)为:"<<endl;
for(i=0;i<N;i++) ///输出矩阵A|b
{
for(j=0;j<N+1;j++)
cout<<setw(9)<<aa[i][j];
cout<<endl;
}
////Gauss消去过程
for(k=0;k<N-1;k++)
{
if(fabs(aa[k][k])<1E-6) ////主元不能为0
{ cout<<"主元为0,计算不能进行!!!"<<endl;
break;
}
for(i=k+1;i<N;i++)
{
aa[i][k]=aa[i][k]/aa[k][k];
for(j=k+1;j<=N;j++)
{
aa[i][j]=aa[i][j]-aa[i][k]*aa[k][j];
}
}
}
cout<<"Gauss消去后的增广矩阵(A|b)为:"<<endl;
ShowResult(aa,x);
//////列主元Gauss消去法
for(k=0;k<N-1;k++) ////消去过程
{
u=k;
for(i=k;i<N;i++)
if(fabs(aa2[i][k])>fabs(aa2[u][k]))
u=i;
if(fabs(aa2[u][k])<1E-6) ////主元不能为0
{ cout<<"主元为0,计算不能进行!!!"<<endl;
break;
}
if(u!=k)
for(j=0;j<N+1;j++) ////交换k,r两行
{
m=aa2[k][j];aa2[k][j]=aa2[u][j];aa2[u][j]=m;
}
for(i=k+1;i<N;i++) ///消元计算
{
aa2[i][k]=aa2[i][k]/aa2[k][k];
for(j=k+1;j<=N;j++)
{
aa2[i][j]=aa2[i][j]-aa2[i][k]*aa2[k][j];
}
}
}
cout<<"列主元Gauss消去后的增广矩阵(A|b)为:"<<endl;
ShowResult(aa2,x);
return 1;
}
void ShowResult(double aa[N][N+1],double x[N+1]) ////回代和显示结果
{
int i,j,k;
double ss;
for(i=0;i<N;i++)
{
for(j=0;j<N+1;j++)
cout<<setw(9)<<aa[i][j];
cout<<endl;
}
/////回代过程
x[N-1]=aa[N-1][N]/aa[N-1][N-1];
for(k=N-2;k>=0;k--)
{
ss=aa[k][N];
for(j=k+1;j<N;j++)
ss=ss-aa[k][j]*x[j];
x[k]=ss/aa[k][k];
}
////输出结果
cout<<"计算结果为:"<<endl;
for(k=0;k<N;k++)
{
cout<<"x["<<k+1<<"]="<<x[k]<<"\t";
}
cout<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -