全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
9280 5
2014-02-16

我的代码如下,为什么运行完之后画出来的图不是我想要的,理论上讲画出来的图应该是两边是水平线,中间是光滑曲线,
但是最终画出来是条直线,求高手帮忙检查!多谢了!

a=-0.618034
b=1.618034

l=function(x){
s=2*log(1+x^2)
t=2*log(1+(x-1)^2)
s-t
}

de=function(x){
4*x/(1+x^2)-4*(x-1)/(1+(x-1)^2)
}


lstar=function(x){
if ((x > a)&(x < b)){
result=l(x)
  }
if (x<=a){
result=de(a)*(x-a)+l(a)
  } else {
result=de(b)*(x-b)+l(b)
  }
result
}

x=seq(from=-4,to=4,by=0.01)
y=lstar(x)

plot(x,y,type='l',ylab= "log-likelihood ratio")



二维码

扫码加我 拉你入群

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

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

全部回复
2014-2-17 17:02:00
复制代码
因为x是向量形式,所以你的function不对,想办法将function中得x定义为向量形式,然后再比
二维码

扫码加我 拉你入群

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

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

2014-2-17 17:04:01
此处的ifelse就相当于那么多判断了
二维码

扫码加我 拉你入群

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

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

2014-2-18 08:44:50
你的lstar函数可以简化,并且vectorize

lstar <- function(x) {
        x0 <- pmin(pmax(a, x), b)
        de(x0)*(x-x0) + l(x0)
}

这样就可以了
二维码

扫码加我 拉你入群

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

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

2014-2-18 08:47:04
或者你可以直接用  y = sapply(x, lstar) 也是可以的
二维码

扫码加我 拉你入群

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

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

2014-2-20 20:44:04
ntsean 发表于 2014-2-18 08:47
或者你可以直接用  y = sapply(x, lstar) 也是可以的
非常感谢
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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