《东南大学数值分析上机题(上).doc》由会员分享,可在线阅读,更多相关《东南大学数值分析上机题(上).doc(49页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date东南大学数值分析上机题(上)第一章 数值分析上机报告 姓名: 学号: 专业: 2013年10月27日第一章舍入误差与有效数设,其精确值为。(1)编制按从大到小的顺序,计算的通用程序。(2)编制按从小到大的顺序,计算的通用程序。(3)按两种顺序分别计算,并指出有效位数。(编制程序时用单精度)(4)通过本上机题,你明白了什么?解:(1)#includevoid main(
2、)float n,i,s;printf(please input n=);scanf(%f,&n);for(i=2,s=0;i=n;s+=1/(i*i-1),i+);printf(s=%fn,s);(2)#includevoid main()float n,i,s;printf(please input n=);scanf(%f,&n);for(i=n,s=0;i=2;s+=1/(i*i-1),i-);printf(s=%fn,s);(3) 按从大到小顺序:=0.740049 有效位数6位 =0.749852 有效位数3位 =0.749852 有效位数3位 按从小到大顺序:=0.740050
3、有效位数5位 =0.749900 有效位数6位 =0.749999 有效位数6位(4) 通过上述实验数据可以看出此次算法使用从小到大的顺序进行得到的数据相对而言更精确,可以得到这样的启示:在计算数值时,要先分析不同算法对结果的影响,避免大数吃小数的现象,找出能得到更精确的结果的算法。第二章(上机题)Newton迭代法(1)给定初值及容许误差,编制Newton法解方程根的通用程序。(2)给定方程,易知其有三个根,。1由Newton方法的局部收敛性可知存在,当时,Newton迭代序列收敛于根。试确定尽可能大的。2试取若干初始值,观察当,时Newton序列是否收敛以及收敛于哪一个根。(3)通过本上机
4、题,你明白了什么?解:(1)#include#include#define eps 0.000001 float f(float x) float f;f=x*x*x/3-x; return(f);float df(float x) float df;df=x*x-1; return (df);void main(void)float x0,x1,a;int k=0;coutx0;doa=-f(x0)/df(x0);x1=x0+a;k+;x0=x1;while(fabs(a)eps);coutktx0;(2)1 #include#includevoid delay(int n) for(n=1
5、0000;n0;n-);#define eps 0.01float f(float x) float f;f=x*x*x/3-x; return(f);float df(float x) float df;df=x*x-1; return (df);int judgement(float z)int count=5;float x0,x1,type,type1;x0=z;while(count-0) x1=x0-f(x0)/df(x0);type=fabs(x1); type1=fabs(x1-x0); coutcount=countttype=typettype1=type1n;if(fab
6、s(x1-x0)eps)return 1;x0=x1;delay(30000); return 0; void main(void)float delta=0;int flag=1;while(flag=1)cout方程的根为:n;delta+=eps;flag=judgement(delta);cout输出方程根收敛的区间值:n;coutdelta-eps; /输出收敛的区间值 取esp=0.1,即步长为0.1时,由程序算出=0.78。所以当(-,)时,迭代序列收敛于根。(2)2#include#include#define eps 0.01float f(float x)float f;f
7、=x*x*x/3-x;return f;float df(float x)float df;df=x*x-1;return df;float ddf(float x)float ddf;ddf=2*x;return ddf;main()float x0,x1,a,dt=0;int k=0;dodt=dt+eps;k+;while(f(-dt)*f(dt)=-f(-dt)/df(-dt)&(2*dt=f(dt)/df(dt); printf(请输入x0:);scanf(%f,&x0);if(x0eps);else if(x0-1&x0eps);else if(x0-dt&x0eps);else
8、if(x0dt&x0eps);else if (x01)doa=-f(x0)/df(x0);x1=x0+a;k+;x0=x1;while(fabs(a)eps);printf(收敛域=%f,迭代次数=%dn,dt,k);printf(根=%fn,x0);-1000-0.95-0.7500.791.5-100-0.90-0.500.8210-10-0.84-0.100.88100-8-0.81000.90500-2-0.800.300.951000-1.2-0.790.7500.9910000由上表可以看出, 在(-,-1)内收敛于,在内收敛于,在(1,+)内收敛于,但在内和均可能收敛于和。(3
9、)在用迭代法进行计算的时候,初值的选择很关键,所选择的初值必须在一定的范围内,如果超出这个范围,将得不出正确的结果。第三章39.列主元三角分解法对于某电路的分析,归结为求解线性方程组RI=V,(1)编制解n阶线性方程组Ax=b的列主元三角分解法的通用程序;(2)用所编制的程序解线性方程组RI=V,并打印出解向量,保留五位有效数;(3)本编程之中,你提高了哪些编程能力?解:(1)#include#includevoid main(void)int i,j,n,k,q;float a1011,s10,s110;coutn;cout输入数组a:endl;for(i=1;i=n;i+)for(j=1;
10、jaij; for(i=1;i=n;i+)for(j=1;j=(n+1);j+)coutaijt;coutn; coutn;int t=1;for(i=1;i=n;i+)si=ai1;float max=fabs(s1);for(i=2;imax)max=fabs(si);t=i;for(j=1;j=(n+1);j+)float b=a1j;a1j=atj;atj=b; for(i=2;i=n;i+)ai1=ai1/max; for(i=1;i=n;i+)for(j=1;j=(n+1);j+)coutaijt;coutn;coutn;for(k=2;k=n;k+)for(i=k;i=n;i+)
11、float sum=0;for(q=1;qk;q+)sum+=aiq*aqk;s1i=aik-sum;int l=k;float m=fabs(s1k);for(i=k;im)m=fabs(s1i);l=i; for(j=1;j=n+1;j+) float s2=akj;akj=alj;alj=s2;for(j=k;j=n+1;j+)float sum1=0;for(q=1;qk;q+)sum1+=akq*aqj;akj=akj-sum1;for(i=k+1;i=n;i+)float sum2=0;for(q=1;qk;q+)sum2+=aiq*aqk;aik=(aik-sum2)/(akk)
12、; for(i=1;i=n;i+)for(j=1;j=(n+1);j+)coutaijt;cout=1;i-)xn=ann+1/ann;float sum3=0;for(j=i+1;j=n;j+)sum3+=aij*xj;xi=(ain+1-sum3)/aii; for(i=1;i=n;i+)coutxi=xiendl; (2)方程的解为:x1= -0.28923,x2= 0.34544,x3= -0.71281,x4= -0.22061,x5= -0.43040,x6= 0.15431,x7= -0.057823,x8= 0.20105,x9= 0.29023。(3) 在此次编程过程中,用到
13、了多次for循环结构,有多层嵌套,程序较为复杂。此外在解方程组过程中,数组起了很大的作用,可以更加方面的写出程序。我提高了分步解决问题的能力,并且更加熟悉循环语句的运用,40逐次超松弛迭代法(1)编制解n阶线性方程组Ax=b的SOR方法的通用程序(要求);(2)对于39题中所给的线性方程组,取松弛因子,容许误差,打印松弛因子、迭代次数、最佳松弛因子及解向量。解:#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,
14、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,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;t=99;t+)l=0;float x09=1,1,1,1,1,1,1,1,1;float x19=1,1
15、,1,1,1,1,1,1,1;w=t/50;dofor(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+)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)
16、;return k; 迭代次数 迭代次数 迭代次数 迭代次数-0.02 12910.04 7000.06 4860.08 3730.10 3030.12 2550.14 2210.16 1940.18 1730.20 1560.22 1420.24 1300.26 1200.28 1110.30 1030.32 960.34 900.36 850.38 800.40 750.42 710.44 680.46 640.48 610.50 580.52 550.54 530.56 510.58 480.60 460.62 440.64 420.66 410.68 390.70 370.72 360
17、.74 340.76 330.78 320.80 300.82 290.84 280.86 270.88 260.90 250.92 240.94 230.96 220.98 211.00 201.02 191.04 181.06 171.08 161.10 151.12 151.14 141.16 121.18 101.20 111.22 121.24 121.26 131.28 131.30 141.32 151.34 151.36 161.38 171.40 181.42 191.44 191.46 201.48 211.50 221.52 241.54 251.56 271.58 30
18、1.60 311.62 341.64 361.66 391.68 441.70 491.72 551.74 601.76 711.78 811.80 971.82 1211.84 1571.86 2281.88 3981.90 15821.92 54271.94 21781.96 13741.98 1009从上表可以看出,最佳松弛因子为=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.290229。