《计算方法与实习》实验报告(2)

2019-04-23 00:05

计算方法与实习

n=2时,和为:S=0.6448341 误差为:i=0.9999999

n=1时,和为:S=1.644834 误差为:i=7.184806e-008

Press any key to continue

结果分析

从这两种不同顺序的结果来看,随着叠加次数的增加,误差是逐渐变小的,当全部叠加完之后,其结果达到了预期值1.644834,而且两种方法出来的最终误差是相同的

习题二:

用牛顿法求下列方程的根:(1)x2?ex?0;

思路分析

1.给定初始值

x0,e为根的容许误差,N为迭代次数的容许值 '2.若

f(x0)?0或迭代次数大于N,则算法失败,结束,否则转向3 xf(x0)1?x0?3.计算f'(x0)

4.若x1?x0?e则输出x1,否则令

x0?x1,转向2

C++语言编程源代码如下:

#include #include #include using namespace std; int main(){ double x0=1,x1,e=0.00001,u; int i,N=100;

cout<<\迭代过程数据如下:\

cout<<\误差\ for(i=1;;i++){ x1=x0-(x0*x0-exp(x0))/(2*x0-exp(x0)); u=fabs(x1-x0);

cout<N)break;

else x0=x1;

6

计算方法与实习

}

}

if(i>N)cout<<\迭代次数超出限制,算法失败\

if(u

实验结果如下:

迭代过程数据如下:

k x0 x1 误差 1 1 -1.39221 2.39221 2 -1.39221 -0.835088 0.557124 3 -0.835088 -0.709834 0.125253 4 -0.709834 -0.703483 0.00635069 5 -0.703483 -0.703467 1.59816e-005 6 -0.703467 -0.703467 1.0107e-010 算法成功,迭代次数为:n=6 Press any key to continue

第三章第1题(1):

编写用追赶法解三对角线性方程组的程序,并解下列方程组:

??4?1?????????1?411?4?1?1??41???27?????15??????15??,b10?1???

??????15?1?????4?????15??Ax?b,其中A10?10

思路分析

1.用一个二维数组存储an,bn,cn,xi,dn

ai?ai?aibi?bibi?1?bi?1?aibi?cidi?1?di?1?aibi?di2.用一个循环语句迭代使矩阵变换为上三角矩阵

3.求出xn

3.用一个循环语句完成回代法,

和,,

xi?di?cixi?1

C++语言编程源代码如下:

#include

7

计算方法与实习

#include #include using namespace std; int main(){ double s[5][10]; int i,j,n=5,m=10; for(i=0;i<=n-1;i++){ for(j=0;j<=m-1;j++){ if(i==0)s[i][j]=1;//an赋值 else if(i==1)s[i][j]=-4;//bn赋值 else if(i==2)s[i][j]=1;//cn赋值 else if(i==3)s[i][j]=0;//xn赋值

else if(i==4&&j==0)s[i][j]=-27;//dn赋值 else if(i==4&&j!=0)s[i][j]=-15;

}

}

for(i=0;i<=m-2;i++){ s[4][i+1]=s[4][i+1]-(s[0][i]/s[1][i])*s[4][i]; s[1][i+1]=s[1][i+1]-(s[0][i]/s[1][i])*s[2][i]; s[0][i]=0;

}

s[0][9]=0;

s[3][9]=s[4][9]/s[1][9]; for(i=m-2;i>=0;i--){ s[3][i]=(s[4][i]-s[2][i]*s[3][i+1])/s[1][i]; }

cout<<\方程的解如下:\

for(i=0;i<=m-1;i++){ cout<<\ } return 0;

}

实验结果如下:

方程的解如下: x0=8.70576 x1=7.82303 x2=7.58637 x3=7.52245 x4=7.50344 x5=7.49131 x6=7.46179 x7=7.35584 x8=6.96156 x9=5.49039

8

计算方法与实习

Press any key to continue

习题4、分别用雅可比迭代法与高斯塞德尔迭代法解下列方程组:

?31??13??0??0,其中R??0??0?0??0??0?1335?90000000?9?31?100000000?1079?3000000?110?305770?50?10000?747?300000000?3041000000?50027?20??0?0???9?0??0?0???2??29?RI?V,

??15???27????23???0??V???20?

??12????7????7?????10?一、雅可比迭代法

思路分析

1.用一个二维数组存储方程组的各项系数,两个数组x0,x1分别存储x和x第二层和第三层进行雅克比迭代

3.输出方程的解

kk?1

2.用三个嵌套的循环语句,第一层把上一次循环的x1赋给x0,并判断是否符合方程解,

C++语言编程源代码如下:

//雅克比迭代式 #include #include #include using namespace std;

int main(){ double

s[9][10]={{ 31,-13,0,0,0,-10,0,0,0,-15},{-13,35,-9,0,-11,0,0,0,0,27},{0,-9,31,-10,0,0,0,0,0,-23},{0

9

计算方法与实习

,0,-10,79,-30,0,0,0,-9,0},{

0,0,0,-30,57,-7,0,-5,0,-20},{0,0,0,0,7,47,-30,0,0,12},{0,0,0,0,0,-30,41,0,0,-7},{0,0,0,0,-5,0,0,27,-2,7},{0,0,0,0,0,0,0,-2,29,-10}} ,x1[9],x0[9],e=0.00001,u,s2=0; int i,j,h,N=0,n=0; for(i=0;i<=8;i++){

x1[i]=x0[i]=1; }

cout<<\迭代过程数据如下:\ for(i=0;;i++){ for(j=0;j<=8;j++){ x0[j]=x1[j];

}

for(j=0;j<=8;j++){ for(h=0;h<=8;h++){ if(h!=j)s2+=(s[j][h]*x0[h]); }

x1[j]=(-s2+s[j][9])/s[j][j];

s2=0; }

for(j=0;j<=8;j++){ u=fabs(x1[j]-x0[j]); if(u

}

if(N==9)break;

cout<<\ cout<<\ cout<<\ cout<

n++;

}

cout<<\算法成功,迭代次数为:n=\ return 0;

}

实验结果如下:

迭代过程数据如下:

x1=0.258065 x2=1.71429 x3=-0.129032 x4=0.620253 x5=0.385965 x6=0.744681

10


《计算方法与实习》实验报告(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:儿童心理学部分作业参考答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: