《计算方法》实验报告二级学院:计算机学院专业:计算机科学与技术指导教师:爨莹班级学号:201107010122姓名:张文江实验一非线性方程的迭代数值解法实验目的:①通过编程和插值与拟合中的某种具体算法解决具体问题,更深一步的体会计算方法这门课的重要性,同时加深对插值与拟合公式某种具体算法的理解。②熟悉编程环境。2、实验要求:实现插值与拟合中的某种具体算法编写并执行3、实验内容:1)用牛顿法求解01553x的根,取初始值为10。2)用弦截法求解数学方程,()^310fxxx在[1,1.5]内的根。4、题目:1)用牛顿法求解01553x的根,取初始值为10。2)用弦截法求解数学方程,()^310fxxx在[1,1.5]内的根5、原理:编程实现牛顿法、弦截法求非线性方程的根。(1)牛顿法x1=(x0-f/f1);(2)单点弦截法x2=x0-f0*(xn-x0)/(fn-f0);6、设计思想:(1)牛顿法首先找到初始值,将初始值带入到方程中,计算一次求导和二次求导的值,确定x0和x1的值,然后利用循环x1=(x0-f/f1),条件为(x0-x1)>1e-6,循环一次的x1的值给x0;直到找到符合的x1为止。(2)单点弦截法首先找到初始值,将初始值带入到方程中,计算一次求导和二次求导的值,确定x0和x1的值,然后利用循环x2=x0-f0*(x1-x0)/(f1-f0);,条件为(x0-x1)>1e-6,循环一次的x2的值给x1;直到找到符合的x2为止。7、对应程序:(1)牛顿法:#include#includefloatf(floata,floatb,floatc,floatd,floatx){floatf;f=a*x*x*x+b*x*x+c*x+d;returnf;}floatf1(floata,floatb,floatc,floatx){floatf1;f1=(x*3*a+2*b)*x+c;returnf1;}floatroot(floata,floatb,floatc,floatd){floatx0,x1=6;do{x0=x1;x1=x0-f(a,b,c,d,x0)/f1(a,b,c,x0);}while(fabs(x1-x0)>=1e-6);returnx0;}voidmain(){floata,b,c,d,x;printf("inputfourfloatnumbers:\n");scanf("%f%f%f%f",&a,&b,&c,&d);x=root(a,b,c,d);printf("%.1fX^3+%.1fX^2+%.1fX+%.1f=0itsrootnearx=1.5is:%.3f\n",a,b,c,d,x);}(2)迭代法:#include#includevoidmain(){floatf(floatx);floatroot(floatx1,floatx2);floatxpoint(floatx1,floatx2);floatx1,x2,f1,f2,x;do{printf("inputx1,x2:\n");scanf("%f,%f",&x1,&x2);f1=f(x1);f2=f(x2);}while(f1*f2>=0);x=root(x1,x2);printf("Arootofequationis%.3f\n",x);}floatroot(floatx1,floatx2){floatxpoint(floatx1,floatx2);floatf(floatx);floatx,y,y1;y1=f(x1);do{x=xpoint(x1,x2);y=f(x);if(y*y1>0){y1=y;x1=x;}elsex2=x;}while(fabs(y)>=0.0001);return(x);}floatf(floatx){floaty;y=x*x*x-x-1;return(y);}floatxpoint(floatx1,floatx2){floaty;y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));return(y);}8、实验结果:(1)牛顿法结果:X=5.372(2)迭代法结果X=1.3259、图形(1)(2)10、实验体会:通过编程,切身感到计算方法这门课绝不仅仅是数学,是图形的观察和实际计算方法的应用,从而解决一些复杂的数值问题。