《数值分析》实验报告.docx

上传人:b****4 文档编号:5239130 上传时间:2022-12-14 格式:DOCX 页数:12 大小:115.30KB
下载 相关 举报
《数值分析》实验报告.docx_第1页
第1页 / 共12页
《数值分析》实验报告.docx_第2页
第2页 / 共12页
《数值分析》实验报告.docx_第3页
第3页 / 共12页
《数值分析》实验报告.docx_第4页
第4页 / 共12页
《数值分析》实验报告.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

《数值分析》实验报告.docx

《《数值分析》实验报告.docx》由会员分享,可在线阅读,更多相关《《数值分析》实验报告.docx(12页珍藏版)》请在冰豆网上搜索。

《数值分析》实验报告.docx

《数值分析》实验报告

《数值分析》实验报告

实验序号:

实验一二题目名称:

全主元消元法

学号:

20101104200姓名:

葛广帅

任课教师:

马季骕专业班级:

10计科(非师范)

1.实验目的:

利用全主元消元法求解线性方程组。

2.实验内容:

全主元消元法就是首先将系数矩阵转化为上三角型,然后利用回代法求解每个未知数。

转化过程中选取绝对值最大的作为全主元。

3.实验代码:

#include

#include

#include

#include

#defineMAXL100

usingnamespacestd;

doubleA[MAXL+10][MAXL+10];//定义矩阵用于存放增广矩阵

intseat[MAXL+10];//存放解得顺序

structpoint

{

intr,c;

};

voidInput(intn);//输入n阶方程组的信息,并展示增广矩阵

pointBoss(intn,intij);//在A[ij][ij]到A[n][n]的正方形中寻找全主元,并返回全主元的位置

voidSwap(intij,pointtemp,intn);//将全主元移到当前左上角

voidOutput(intn);//输出增广矩阵

voidAnswer(intn);//利用回代法求解,并将结果储存在A[i][n+1]中

voidOutputAnswer(intn);//按顺序输出结果

intmain()

{

freopen("test.txt","r",stdin);

freopen("MyAnswer.txt","w",stdout);

intn,i,j,k,num;

doublekk;

pointbosspoint;

cout<<"*****************************"<

cout<<"*实验(一二)全主元消元法*"<

cout<<"*****************************"<

cout<

cout<<"请输入方程组的阶(按0结束):

"<

while(cin>>n&&n)

{

Input(n);//输入n阶方程组的信息,并展示增广矩阵

for(i=1;i<=n;i++)//初始化位置数组

{

seat[i]=i;

}

cout<<"下面利用全主元消元法将系数矩阵化为上三角型"<

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

{

cout<<"第"<

";

bosspoint=Boss(n,k);//在A[k][k]到A[n][n]的正方形中寻找全主元,并返回全主元的位置

cout<<"选取的全主元是:

"<<"A["<

Swap(k,bosspoint,n);//将全主元移到当前左上角

cout<<"增广矩阵更新后如下:

"<

Output(n);//输出增广矩阵

num=0;

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

{

num++;

kk=A[i][k]/A[k][k];

cout<<"第["<

(倍数为"<

A[i][k]=0;

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

{

A[i][j]=A[i][j]-A[k][j]*kk;

}

Output(n);//输出增广矩阵

}

}

cout<<"由上面的增广矩阵可知,系数矩阵已经化为上三角型,下面的工作是利用回代法求解"<

Answer(n);//利用回代法求解,并将结果储存在A[i][n+1]中

OutputAnswer(n);//按顺序输出结果

cout<<"请输入方程组的阶(按0结束):

";

}

}

voidInput(intn)

{

inti,j;

cout<

cout<<"请输入方程组的系数矩阵:

"<

for(i=1;i<=n;i++)//输入系数矩阵

{

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

{

cin>>A[i][j];

}

}

cout<

cout<<"请输入方程组的常数项:

"<

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

{

cin>>A[i][n+1];

}

cout<

cout<<"方程组的增广矩阵如下:

"<

cout<

cout<

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

{

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

{

cout<

}

cout<

}

cout<

cout<

return;

}

pointBoss(intn,intij)

{

intmaxi,maxj,i,j;

doublemaxone;

maxone=0;

for(i=ij;i<=n;i++)

{

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

{

if(fabs(A[i][j])>maxone)

{

maxone=fabs(A[i][j]);

maxi=i;maxj=j;

}

}

}

if(maxone)

{

pointtemp;

temp.r=maxi;

temp.c=maxj;

returntemp;

}

else

{

cout<<"异常退出!

"<

exit

(1);

}

}

voidSwap(intij,pointtemp,intn)

{

doubletmp;

inti,j,tempseat;

if(temp.r!

=ij)

{

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

{

tmp=A[ij][j];

A[ij][j]=A[temp.r][j];

A[temp.r][j]=tmp;

}

}

if(temp.c!

=ij)

{

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

{

tmp=A[i][ij];

A[i][ij]=A[i][temp.c];

A[i][temp.c]=tmp;

}

tempseat=seat[ij];

seat[ij]=seat[temp.c];

seat[temp.c]=tempseat;

}

return;

}

voidOutput(intn)

{

inti,j;

cout<

cout<

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

{

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

{

cout<

}

cout<

}

cout<

cout<

return;

}

voidAnswer(intn)

{

inti,j;

if(A[n][n]==0)

{

cout<<"异常退出!

"<

exit

(1);

}

A[n][n+1]=A[n][n+1]/A[n][n];

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

{

for(j=n;j>i;j--)

{

A[i][n+1]=A[i][n+1]-A[i][j]*A[j][n+1];

}

A[i][n+1]=A[i][n+1]/A[i][i];

}

return;

}

voidOutputAnswer(intn)

{

inti,j;

cout<<"-------------------------------"<

cout<<"-------------------------------"<

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

{

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

{

if(seat[j]==i)

{

cout<<"X"<

break;

}

}

}

cout<<"-------------------------------"<

cout<<"-------------------------------"<

cout<

return;

}

4.结果分析:

全主元消元法,是在每次选取主元素时选取当前绝对值最大的。

根据一般性经验,在做除法运算时,分母的绝对值越大,舍入误差影响就越小。

全主元的做法可以得到较好的解。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1