9365 5

[问答] R分段函数编写 [推广有奖]

  • 8关注
  • 2粉丝

讲师

33%

还不是VIP/贵宾

-

威望
0
论坛币
310 个
通用积分
0
学术水平
1 点
热心指数
1 点
信用等级
0 点
经验
15111 点
帖子
218
精华
0
在线时间
379 小时
注册时间
2012-10-31
最后登录
2020-8-31

楼主
慧(会)幸福 发表于 2014-2-16 11:34:28 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

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

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")



二维码

扫码加我 拉你入群

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

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

关键词:分段函数 function Result LSTAR RESUL function result 水平线

沙发
yywan0913 在职认证  发表于 2014-2-17 17:02:00
  1. a=-0.618034
  2. b=1.618034
  3. l=function(x){
  4. s=2*log(1+x^2)
  5. t=2*log(1+(x-1)^2)
  6. s-t
  7. }
  8. de=function(x){
  9. 4*x/(1+x^2)-4*(x-1)/(1+(x-1)^2)
  10. }
  11. x=seq(from=-4,to=4,by=0.01)
  12. lstar=ifelse(x>a,ifelse(x<b,l(x)*2,de(b)*(x-b)+l(b)),de(a)*(x-a)+l(a))
  13. y=lstar
  14. plot(x,y,type='l',ylab= "log-likelihood ratio")
复制代码
因为x是向量形式,所以你的function不对,想办法将function中得x定义为向量形式,然后再比
是什么给了你自信

藤椅
yywan0913 在职认证  发表于 2014-2-17 17:04:01
此处的ifelse就相当于那么多判断了
是什么给了你自信

板凳
ntsean 发表于 2014-2-18 08:44:50
你的lstar函数可以简化,并且vectorize

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

这样就可以了

报纸
ntsean 发表于 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) 也是可以的
非常感谢

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-19 10:00