数值分析实验二(列主元Gauss消去法)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数值分析》实验报告

实验编号:实验二

课题名称:列主元Gauss消去法

一、算法介绍

1、输入矩阵的阶数n,方程组的增广矩阵A;

2、对k=0,1,…,n-2,循环:选取列中绝对值最大的元素,将主元所在的行的元素保存在

数组temp[n+1]中。若主元为零,则系数矩阵奇异,计算停止;否则,顺序进行。如果绝对值最大的元素就在矩阵的对角线上,则进行普通高斯消元法的第一大步,否则将方程组系数换行之后再进行普通高斯消元法的第一大步;

3、然后利用回代法求解线性方程组。

二、程序代码

#include

#include

#include

using namespace std;

int main()

{

int n=0,k=0,i=0,j=0,h=0,g=0,flag=0,i1,j1;

double max=0,m=0;

cout<<"***利用列主元Gauss消元法求解线性方程组***"<

cout<<"请输入矩阵的阶数:"<

cin>>n;

double a[n][n+1];

double t[n+1];

double x[n];

memset(a,0,sizeof(a));

memset(x,0,sizeof(x));

cout<<"请输入方程组的增广矩阵:"<

for(i=0;i

{

for(j=0;j

{

cin>>a[i][j];

}

}

for(k=0;k

{

max=0;j1=0;

for(i=k;i

{

if(fabs(a[i][k])>max)

{

max=fabs(a[i][k]);

i1=i;

j1=k;

}

}

if(max==0)

{

cout<<"该系数矩阵为奇异矩阵,计算停止"<

flag=1;

break;

}

else

{

cout<<"第"<

<<",在线性方程组的第"<

if(i1!=k)

{

for(j=0;j<=n;j++)

{

t[j]=a[i1][j];

a[i1][j]=a[k][j];

a[k][j]=t[j];

}

}

for(i=k+1;i<=n-1;i++)

{

m=a[i][k]/a[k][k];

for(j=k;j<=n;j++)

a[i][j]=a[i][j]-m*a[k][j];

for(g=0;g

{

for(h=0;h

cout<

cout<

}

cout<

}

}

}

if(flag==0)

{

x[n-1]=a[n-1][n]/a[n-1][n-1] ;

double sum=0;

for(k=n-2;k>=0;k--)

{

sum=0;

for(i=n-1;i>=k;i--)

sum+=a[k][i]*x[i];

x[k]=(a[k][n]-sum)/a[k][k];

}

cout<<"该线性方程组的解为:"<

for(i=0;i

cout<<"x"<

}

system("pause");

return 0;

}

三、运算结果截屏

四、算法分析

列主元Gauss消元法避免了普通高斯消元法中出现的问题:遇到某个主元为零或者当主元绝对值很小时,计算将会停止或求出的结果将与其实际结果相差很远。但是当方程组各行系数的量级相差很大时

列主元Gauss高斯消元法就会失效,也会使方程组的结果不准确。

相关文档
最新文档