今天发现百度知道有人问这个问题,所以就信手帮他做了一下题目,总共两道题,使用的是C语言解决的。
题目:
1.请设计程序,用牛顿迭代法求f(x)=cos(x)-x的近似根,要求精确到10-6。 (1)用函数float newtoon(float x)求方程在x附近的根; (2)用函数float F(float x)求x处的函数值,用函数float F1(float x)求f(x)在x处的导数; (3)在主函数中输入x0,调用函数求得方程的近似根(精度要求为10-5),并输出结果。
程序代码如下:
1 #include<stdio.h> 2 #include<math.h> 3 float Fl(float x) 4 { 5 float y; 6 y=cos(x)-x; 7 return y; 8 } 9 float newtoon(float x) 10 { 11 float y; 12 y=x-Fl(x)/(-sin(x)-1); 13 return y; 14 } 15 void main() 16 { 17 float x0,x1; 18 printf("Please input x0:\n"); 19 scanf("%f",&x1); 20 do 21 { 22 float z; 23 x0=x1; 24 x1=newtoon(x0); 25 }while(fabs(x1-x0)>=1e-5); 26 printf("The root of equation is %f\n",x1); 27 }
2.已知f(x)=lnx+x2在(1/e, 1)内有唯一的一个实根。请设计程序,用二分法求该近似实根。精确到|f(x)|<0.0001为止。 (1)用函数double eff(double x)求方程在x附近的根; (2)在主函数中输入x,调用函数求得方程的近似根,并输出结果。
程序代码如下:
1 #include<stdio.h> 2 #include<math.h> 3 double eff(double x) 4 { 5 double y; 6 y=log(x)+pow(x,2); 7 for(;y<=1e-4;){ 8 if(y>0) 9 { 10 x=(x+1/exp(1))/2; 11 eff(x); 12 } 13 else 14 { 15 x=(x+1)/2; 16 eff(x); 17 } 18 } 19 return y; 20 } 21 void main() 22 { 23 double x,z; 24 printf("Please input x:\n"); 25 do 26 { 27 scanf("%lf",&x); 28 }while(x<=1/exp(1)||(x>=1));//输入的数字必须在区间内,因为题目中已经指出在这个区间有一个根! 29 z=eff(x); 30 printf("the root of the equation is:%lf\n",z); 31 }
其实也不难吗,只不过就是数学要理解好哦。