计算方法与实习
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
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 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 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