新数值分析报告.docx

上传人:b****5 文档编号:3026813 上传时间:2022-11-17 格式:DOCX 页数:26 大小:425.97KB
下载 相关 举报
新数值分析报告.docx_第1页
第1页 / 共26页
新数值分析报告.docx_第2页
第2页 / 共26页
新数值分析报告.docx_第3页
第3页 / 共26页
新数值分析报告.docx_第4页
第4页 / 共26页
新数值分析报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

新数值分析报告.docx

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

新数值分析报告.docx

新数值分析报告

微软中国

[此页不打印]

[键入文档副标题]

微软用户

[选取日期]

课题一:

线性方程组的迭代法

一、实验内容

1、设线性方程组

=

x

=(1,-1,0,1,2,0,3,1,-1,2)

2、设对称正定阵系数阵线方程组

=

x

=(1,-1,0,2,1,-1,0,2)

3、三对角形线性方程组

=

x

=(2,1,-3,0,1,-2,3,0,1,-1)

试分别选用Jacobi迭代法,Gauss-Seidol迭代法和SOR方法计算其解。

二、实验要求

1、体会迭代法求解线性方程组,并能与消去法做以比较;

2、分别对不同精度要求,如

由迭代次数体会该迭代法的收敛快慢;

3、对方程组2,3使用SOR方法时,选取松弛因子

=0.8,0.9,1,1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松弛因子的最佳者;

4、给出各种算法的设计程序和计算结果。

三、目的和意义

1、通过上机计算体会迭代法求解线性方程组的特点,并能和消去法比较;

2、运用所学的迭代法算法,解决各类线性方程组,编出算法程序;

3、体会上机计算时,终止步骤

<

或k>(予给的迭代次数),对迭代法敛散性的意义;

4、体会初始解x

,松弛因子的选取,对计算结果的影响。

 

四、流程图设计

1、主程序流程图

图1-1主程序流程图

 

2、Jacobi迭代算法流程:

图1-2Jacobi迭代法流程图

 

3、Gauss-Seidel迭代算法流程同Jacobi算法,迭代关系式为

图1-3Gauss-Seidol迭代法流程图

 

4、SOR迭代算法:

图1-4SOR迭代法流程图

五、程序代码

#include

usingnamespacestd;

#defineN40

constintn=10;

intjacobi(float*p,floatb[],floatX[],floatx[],intn);

intGS(float*p,floatb[],floatX[],floatx[],intn);

intSOR(float*p,floatb[],floatX[],floatx[],intn);

voidprint(float*a,intr);

voidmain()

{

floatA[10][10]={4,2,-3,-1,2,1,0,0,0,0,

8,6,-5,-3,6,5,0,1,0,0,

4,2,-2,-1,3,2,-1,1,9,4,

0,-2,1,5,-1,3,-1,1,9,4,

-4,2,6,-1,6,7,-3,3,2,3,

8,6,-8,5,7,17,2,6,-3,5,

0,2,-1,3,-4,2,5,3,0,1,

16,10,-11,-9,17,34,2,-1,2,2,

4,6,2,-7,13,9,2,0,12,4,

0,0,-1,8,-3,-24,-8,6,3,-1};

floata[10]={7,5,-13,2,6,-12,14,-4,5,-5};

floatX1[10]={0,0,0,0,0,0,0,0,0,0};

floatx1[10];

floatB[8][8]={4,2,-4,0,2,4,0,0,

2,2,-1,-2,1,3,2,0,

-4,-1,14,1,-8,-3,5,6,

0,-2,1,6,-1,-4,-3,3,

2,1,-8,-1,22,4,-10,-3,

4,3,-3,-4,4,11,1,-4,

0,2,5,-3,-10,1,14,2,

0,0,6,3,-3,-4,2,19};

floatb[8]={0,-6,6,23,11,-22,-15,45};

floatX2[8]={0,0,0,0,0,0,0,0};

floatx2[8];

floatC[10][10]={4,-1,0,0,0,0,0,0,0,0,

-1,4,-1,0,0,0,0,0,0,0,

0,-1,4,-1,0,0,0,0,0,0,

0,0,-1,4,-1,0,0,0,0,0,

0,0,0,-1,4,-1,0,0,0,0,

0,0,0,0,-1,4,-1,0,0,0,

0,0,0,0,0,-1,4,-1,0,0,

0,0,0,0,0,0,-1,4,-1,0,

0,0,0,0,0,0,0,-1,4,-1,

0,0,0,0,0,0,0,0,-1,4};

floatc[10]={7,5,-13,2,6,-12,14,-4,5,-5};

floatx3[10];

floatX3[10]={0,0,0,0,0,0,0,0,0,0};

float*p[3];

p[0]=&A[0][0];

p[1]=&B[0][0];

p[2]=&C[0][0];

cout<<"Jacobi迭代法解第一个方程:

"<

jacobi(p[0],a,X1,x1,10);

cout<<"Jacobi迭代法解第二个方程:

"<

jacobi(p[1],b,X2,x2,8);

cout<<"Jacobi迭代法解第三个方程:

"<

jacobi(p[2],c,X3,x3,10);

cout<<"Gauss-Seidel迭代法解第一个方程:

"<

GS(p[0],a,X1,x1,10);

cout<<"Gauss-Seidel迭代法解第二个方程:

"<

GS(p[1],b,X2,x2,8);

cout<<"Gauss-Seidel迭代法解第三个方程:

"<

GS(p[2],c,X3,x3,10);

cout<<"SOR迭代法解第一个方程:

"<

SOR(p[0],a,X1,x1,10);

cout<<"SOR迭代法解第二个方程:

"<

SOR(p[1],b,X2,x2,8);

cout<<"SOR迭代法解第三个方程:

"<

SOR(p[2],c,X3,x3,10);

}

intjacobi(float*p,floatb[],floatX[],floatx[],intn)

{

intk,i,j;

floatm,R,r,e;

cout<<"请输入精度e:

";

cin>>e;

for(k=0;k

{

R=0;

for(i=0;i

{

m=0;

for(j=0;j

{

m=m+(*(p+i*n+j))*X[j];

}

x[i]=X[i]+(b[i]-m)/(*(p+i*n+i));

r=x[i]-X[i];

if(r<0)

r=X[i]-x[i];

if(r>R)

R=r;

}

if(R<=e&&R>0)

{

print(x,n);

cout<<"迭代次数为:

"<

returnk;

}

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

X[j]=x[j];

}

print(x,n);

cout<<"迭代次数为:

"<

cout<<"方程解发散,无法用Jacobi方法解此方程!

"<

return0;

}

intGS(float*p,floatb[],floatX[],floatx[],intn)

{

inti,j,k;

floatt,R,r,e;

cout<<"请输入精度e:

";

cin>>e;

for(k=0;k

{

for(i=0;i

{

t=0;

for(j=0;j

{

if(j

t+=(*(p+i*n+j))*x[j];

if(j>i)

t+=(*(p+i*n+j))*X[j];

}

x[i]=(b[i]-t)/(*(p+i*n+i));

}

for(i=0;i<10;i++)

{

r=x[i]-X[i];

if(r<0)

r=X[i]-x[i];

if(r>R)

R=r;

}

if(R<=e&&R>0)

{

print(x,n);

cout<<"迭代次数为:

"<

returnk;

}

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

X[j]=x[j];

}

print(x,n);

cout<<"迭代次数为:

"<

cout<<"方程解发散,无法用Gauss-Seidel方法解此方程!

"<

return0;

}

intSOR(float*p,floatb[],floatX[],floatx[],intn)

{

inti,j,k;

floatt,R,r,e,w;

cout<<"请输入松弛因子w(0

";

cin>>w;

cout<<"请输入精度e:

";

cin>>e;

for(i=0;i

x[i]=X[i];

for(k=0;k

{

R=0;

for(i=0;i

{

t=0;

for(j=0;j

t+=(*(p+i*n+j))*x[j];

r=w*(b[i]-t)/(*(p+i*n+i));

x[i]+=r;

if(r<0)

r=-r;

if(r>R)

R=r;

}

if(R<=e&&R>0)

{

print(x,n);

cout<<"迭代次数为:

"<

returnk;

}

}

print(x,n);

cout<<"迭代次数为:

"<

cout<<"方程解发散,无法用XOR方法解此方程!

"<

return0;

}

voidprint(float*a,intn)

{

intj;

float*t=a;

cout<<"x=(";

for(j=0;j

cout<<*(t+j)<<",";

cout<<*(t+j)<<")"<

}

六、程序运行截图

七、小结及体会

经过这次试验,我通过上机计算体会迭代法求解线性方程组的特点,并能和消去法比较,并运用所学的迭代法算法,解决各类线性方程组,编出算法程序。

切实体会到了上机计算时,终止步骤

<

或k>(予给的迭代次数),对迭代法敛散性的意义,了解了初始解x

,松弛因子的选取,对计算结果的影响。

在试验中,不同的系数矩阵对上述三种迭代方法有很大影响,会导致结果发散无法得到正常结果。

三种算法的收敛,SOR方法最大,其次Gauss-Seidel方法,Jacobi方法最小,松弛因子的不同也和收敛速度密切相关。

 

课题二:

数值积分

一、实验内容

选用复合

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

当前位置:首页 > 表格模板 > 合同协议

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

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