用牛顿迭代法和二分法求方程的根

用牛顿迭代法和二分法求方程的根

今天发现百度知道有人问这个问题,所以就信手帮他做了一下题目,总共两道题,使用的是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 }

其实也不难吗,只不过就是数学要理解好哦。

posted @ 2013-04-27 15:17 倾杯天涯 阅读( ...) 评论( ...) 编辑 收藏
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值