新数值分析报告.docx
《新数值分析报告.docx》由会员分享,可在线阅读,更多相关《新数值分析报告.docx(26页珍藏版)》请在冰豆网上搜索。
新数值分析报告
微软中国
[此页不打印]
[键入文档副标题]
微软用户
[选取日期]
课题一:
线性方程组的迭代法
一、实验内容
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;ix[i]=X[i];
for(k=0;k{
R=0;
for(i=0;i{
t=0;
for(j=0;jt+=(*(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;jcout<<*(t+j)<<",";
cout<<*(t+j)<<")"<}
六、程序运行截图
七、小结及体会
经过这次试验,我通过上机计算体会迭代法求解线性方程组的特点,并能和消去法比较,并运用所学的迭代法算法,解决各类线性方程组,编出算法程序。
切实体会到了上机计算时,终止步骤
<
或k>(予给的迭代次数),对迭代法敛散性的意义,了解了初始解x
,松弛因子的选取,对计算结果的影响。
在试验中,不同的系数矩阵对上述三种迭代方法有很大影响,会导致结果发散无法得到正常结果。
三种算法的收敛,SOR方法最大,其次Gauss-Seidel方法,Jacobi方法最小,松弛因子的不同也和收敛速度密切相关。
课题二:
数值积分
一、实验内容
选用复合