1、东南大学数值分析上机练习前三章数值分析上机练习(以VC+6.0为操作平台)第一章20.(1)程序如下:#include#include#includevoid main() int N; double sum; float sum1=0, f; coutN; for(float i=2;i=N;i+) f=1/(i*i-1); sum1=sum1+f; coutsum1=sum1endl;sum=0.5*(1.51.0/N1.0/(N+1);coutsum=sumendl;20(2)程序如下:#include#include#includevoid main() int N; float su
2、m2=0, f;double sum; coutN; for(float i=N;i=2;i-) f=1/(i*i-1); sum2=sum2+f; coutsum2=sum2endl;sum=0.5*(1.51.0/N1.0/(N+1);coutsum=sumendl;20.(1)运行结果如下:100sum1=0.740049 sum=0.74005Press any key to continue10000sum1=0.749852sum=0.7499Press any key to continue1000000sum1=0.749999sum=0.749999Press any key
3、 to continue20.(2)运行结果如下:100sum2=0.74005 sum=0.74005Press any key to continue10000sum2=0.7499sum=0.7499Press any key to continue1000000sum2=0.749999sum=0.749999Press any key to continue结果分析:当n=100时,sum1的6位数字中有5位有效数字,而sum2所有数字都是有效数字。当n=10000时,sum1的6位数字中有4位有效数字,而sum2所有数字都是有效数字。当n=1000000时sum1,sum2有相同位
4、数的有效数字。由运行结果可知:当精度较低时按从大到小的顺序累加的精度低于按从小到大的顺序累加结果的精度。至于当精度较高时,sum1,sum2会得出相同结果。第二章20.程序如下:#include#include#includevoid main() int count=0; double fl,f2,y; double x,xl,u=1.0; coutxl; couty;for(count=0;fabs(u)=y;count+) x=xl; fl=x*x*x/3-x; f2=x*x-1; xl=x-fl/f2; u=xl-x; if(count10000) cout迭代结果不收敛于0!endl
5、; break; cout方程的一个根为:xlendl;运行结果如下:请输入x0的初值:100请输入容许误差y的初值:1e-6方程的一个根为:1.73205Press any key to continue请输入x0的初值:0.7745966请输入容许误差y的初值:1e-6方程的一个根为:0Press any key to continue请输入x0的初值:0.7745967请输入容许误差y的初值:1e-6方程的一个根为:-1.73205Press any key to continue请输入x0的初值:-0.7745966请输入容许误差y的初值:1e-6方程的一个根为:0Press any
6、key to continue请输入x0的初值:-0.7745967请输入容许误差y的初值:1e-6方程的一个根为:1.73205Press any key to continue请输入x0的初值:-100请输入容许误差y的初值:1e-6方程的一个根为:-1.73205Press any key to continue其中尽可能大的=0.7745966是经过多次试算得出的结论,并得出以下结论:当x0-1时,Newton序列收敛于-1.73205;当-1x0-时,Newton序列收敛于-1.73205当-x0时,Newton序列收敛于0;当x01时,Newton序列收敛于1.73205.通过本上
7、机题,我们可以知道当输入初值x0的不同,迭代结果可能收敛与不同的根。第三章35.程序如下:#include #include #include const int N=9; /方程组系数增广矩阵的行数const int M=10; /方程组系数增广矩阵的列数void main()int b,c,k,i,j;double aNM;double y;cout请输入数组:endl; for (b=0;bN;b+) for (c=0;cabc; cout您输入的数组为:;for (b=0;bN;b+) coutendl;for (c=0;cM;c+) /输出方程组的系数矩阵便于核对数据是否输错cout
8、setw(5)abc; coutendl;int p,q;double tM;for (k=0;kN;k+)for(q=k+1;qN;q+);if(akkaqk) for (p=k;pM;p+)tp=akp; akp=aqp; aqp=tp; /选出列主元for (i=k+1;iN;i+) y=aik/akk; /实施消去过程,得到上三角系数增广矩阵for (j=k;j=0;f-) s=0;for (g=f+1;gN;g+) /由上三角形的系数增广矩阵求出方程组的解s=s+afg*xg; xf=(afN-s)/aff; cout方程组的解为:endl;for (b=0;bN;b+) /输出方程
9、组的解 coutsetw(5)xb=xb; coutendl;运行结果如下:见附图36.程序如下:#include#include#define eps 0.5e-5 /迭代误差void main(void)int i,j,l; float w,t; float m9; float sum; float a99=31,-13,0,0,0,-10,0,0,0,-13,35,-9,0,-11,0,0,0,0,0,-9,31,-10,0,0,0,0,0,0,0,-10,79,-30,0,0,0,-9,0,0,0,-30,57,-7,0,-5,0,0,0,0,0,-7,47,-30,0,0,0,0,0
10、,0,0,-30,41,0,0,0,0,0,0,-5,0,0,27,-2, 0,0,0,-9,0,0,0,-2,29; float b9=-15,27,-23,0,-20,12,-7,7,10; float max(float m9); for(t=1.0;t=99;t+) l=0; float x09=1,1,1,1,1,1,1,1,1; float x19=1,1,1,1,1,1,1,1,1; w=t/50; do for(i=0;i9;i+)x0i=x1i;for(i=0;i9;i+)sum=0;for(j=0;ji;j+) sum=sum+aij*x1j;for(j=i+1;j9;j+
11、)sum=sum+aij*x0j;x1i=(1-w)*x0i+w*(bi-sum)/aii; /解出九个解 for(i=0;i=eps);if(max(m)=eps)cout迭代次数=ltw=wn;for(i=0;i9;i+)coutx1i=x1it;cout-n;float max(float m9) /求出最大的迭代误差 float k;k=(fabs(m0); for(int i=1;ik) k=fabs(mi); return k;运行结果如下:迭代次数迭代次数迭代次数迭代次数0.0212910.52551.02191.52240.047000.54531.04181.54250.06
12、4860.56511.06171.56270.083730.58481.08161.58300.103030.60461.10151.60310.122550.62441.12151.62340.142210.64421.14141.64360.161940.66411.16121.66390.181730.68391.18101.68440.201560.70371.20111.70490.221420.72361.22121.72550.241300.74341.24121.74600.261200.76331.26131.76710.281110.78321.28131.78810.30
13、1030.80301.30141.80970.32960.82291.32151.821210.34900.84281.34151.841570.36850.86271.36161.862280.38800.88261.38171.883980.40750.90251.40181.9015820.42710.92241.42191.9254270.44680.94231.44191.9421780.46640.96221.46201.9613740.48610.98211.48211.9810090.50581.00201.5022从1.92到2.00均出现不合理的迭代次数,迭代次数偏大。不是合理的迭代值。当初值为x=(1,1,1,1,1,1,1,1,1,)T 时,从上表可以看出,最佳松弛因子为=1.18,迭代次数仅为10次,方程的解为: x1= -0.289231,x2= 0.345437,x3= -0.712811, x4= -0.220608,x5= -0.430400,x6= 0.154309,x7= -0.057823,x8= 0.201054,x9= 0.2902