全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
9943 10
2013-01-21
程序如下:
fd<-function(x){
1/x/(1 + x) - log(x)/(1 + x)^2}
fzero<-function(f,a,b,eps=1e-5){
if(f(a)*f(b)>0)
   list(fail="failed")
else{
   repeat{
     if(abs(b-a)<eps) break
     x<-(a+b)/2
     if(f(a)*f(b)<0) b<-x else a<-x
   }
list(root=(a+b)/2,fun=f(x))
}
}
fzero(fd,0,10)
得到的结果是2.5与标准的3.59112相去甚远,望解答

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-1-21 13:54:09
fzero<-function(f,a,b,eps=1e-6){
  if(f(a)*f(b)>0)
    list(fail="failed")
  else{
    repeat{
      x<-(a+b)/2      
      if(f(a)*f(x)<0) b<-x else a<-x
      if(abs(b-a)<eps) break
    }
    list(root=(a+b)/2,fun=f(x))
  }
}
fd<-function(x)    1/x/(1 + x) - log(x)/(1 + x)^2
fzero(fd,0,10)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-21 13:58:14
原因在于你给出的方程在区间[0,10]之间的解不唯一,而且2.5是方程的一个解
复制代码

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-21 14:13:25
clips 发表于 2013-1-21 13:54
fzero0)
    list(fail="failed")
  else{
感谢您的帮助。可以解释一下原来repeat里的那段程序哪里有问题吗?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-21 14:16:32
Aharach 发表于 2013-1-21 13:58
原因在于你给出的方程在区间[0,10]之间的解不唯一,而且2.5是方程的一个解
感谢您的回复,不过fd是一个单调函数,出现在【0,10】上有两根是不现实的。作图也可以看到这一点
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-21 14:36:17
Aharach 发表于 2013-1-21 13:58
原因在于你给出的方程在区间[0,10]之间的解不唯一,而且2.5是方程的一个解
这个解释不对。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群